{
  "automatic_evidence_credit": false,
  "captures": [],
  "change_log": [
    {
      "after_hash": "2cca856c17b55ca178a24a9671bb3ff5c31070dcab74175eb9f34e2b9951feab",
      "before_hash": "2cca856c17b55ca178a24a9671bb3ff5c31070dcab74175eb9f34e2b9951feab",
      "diff": {
        "changes": [
          {
            "compatibility_class": "INFO",
            "fact": "Declared provider, version, model, operator or AI self-disclosure changed",
            "kind": "DECLARED_INGREDIENTS_CHANGED",
            "path": "$.declared_ingredients_changed",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 0,
          "INFO": 1,
          "NON_BREAKING": 0
        },
        "taxonomy_version": null,
        "total": 1,
        "truncated": false
      },
      "entry_sha256": "c0107902c14f148779989e56c09a9a593cd819be097653bcc0e39eb94bbedf94",
      "evidence_class": "FACT_CHANGE",
      "labels": [
        "DECLARED_INGREDIENTS_CHANGED"
      ],
      "observed_at_utc": "2026-11-09T09:46:43Z",
      "previous_entry_sha256": "02b43ee6c71322faf8b35b3293431e166c473135c54ab0902c0e60f6e9802681",
      "receipt_id": null,
      "receipt_url": null,
      "sequence": 76756,
      "target_id": "obs_1d58b7f9071398115773df57",
      "target_kind": "A2A_CARD",
      "target_locator": "https://beggar-bot-demand.beggarbot.workers.dev/.well-known/agent-card.json"
    },
    {
      "after_hash": "2cca856c17b55ca178a24a9671bb3ff5c31070dcab74175eb9f34e2b9951feab",
      "before_hash": "de15633865145b97f7e2f4ecf204cc458170fe733a170fa8709f8f504ef35408",
      "diff": {
        "changes": [
          {
            "compatibility_class": "BREAKING",
            "fact": "endpoint moved",
            "kind": "ENDPOINT_MOVED",
            "path": "url",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_abidecode]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_addrpoison]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_addrprofile]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_allowance]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_approvals]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_avmeta]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_basename]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_batch]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_batchdecode]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_blocktime]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_chainfees]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_chaintvl]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_contacts]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_contractrisk]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_cronparse]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_cryptonews]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_defistats]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_delivery_attest]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_delivery_attest_verify]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_dexquote]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_eip3009]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_ens]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_erc20balances]",
            "security_relevant_field": false
          },
          {
            "compatibility_class": "NON_BREAKING",
            "fact": "skill added",
            "kind": "SKILL_ADDED",
            "path": "skills[v1_evmaddr]",
            "security_relevant_field": false
          }
        ],
        "classified": true,
        "counts_by_class": {
          "BREAKING": 1,
          "INFO": 3,
          "NON_BREAKING": 78
        },
        "taxonomy_version": "1.0.0",
        "total": 82,
        "truncated": true
      },
      "entry_sha256": "1790ebf3dfd4d513fc40c04181e462cc879ef0f5b9a82e3d92a16625dc9b2595",
      "evidence_class": "MANIFEST_CHANGE",
      "labels": [
        "MANIFEST_CHANGED",
        "SECURITY_RELEVANT_FIELD_CHANGED"
      ],
      "observed_at_utc": "2026-11-09T09:46:43Z",
      "previous_entry_sha256": "49acf5d547ae422d038b103a4259b12c2993678aec1c36a6016894ebc46201e8",
      "receipt_id": "a13d6d52-517f-547e-a7a8-43e7b3e53291",
      "receipt_url": "https://www.gaipagents.com/v1/free/receipts/a13d6d52-517f-547e-a7a8-43e7b3e53291",
      "sequence": 76754,
      "target_id": "obs_1d58b7f9071398115773df57",
      "target_kind": "A2A_CARD",
      "target_locator": "https://beggar-bot-demand.beggarbot.workers.dev/.well-known/agent-card.json"
    }
  ],
  "check_outcomes": {
    "ask": {
      "changed_since": "https://www.gaipagents.com/v1/free/observatory/changed-since?url=<endpoint>",
      "changes_and_reachability": "https://www.gaipagents.com/v1/free/changes/subscribe?url=<endpoint>",
      "conformance": "https://www.gaipagents.com/v1/free/conformance/check?url=<endpoint>"
    },
    "published": false,
    "why": "Outcomes of GAIP's own checks (whether the endpoint answered, HTTP status, response time, conformance findings) are given only to a caller who asks about the URL, never on a public page, list or feed. The same applies to every target."
  },
  "conformance": {
    "findings": "GIVEN_TO_CALLER_ONLY",
    "meaning": "The rule catalogue this manifest was read against at the observed time. The finding codes go only to a caller who checks the URL (check_outcomes.ask.conformance).",
    "observed_at_utc": "2026-11-12T23:03:07Z",
    "protocol": "A2A",
    "rule_catalogue_route": "/v1/free/knowledge/conformance-rules",
    "rule_catalogue_version": "1.0.0"
  },
  "corrections": {
    "contact": "https://www.gaipagents.com/contact",
    "exclusion": "https://www.gaipagents.com/v1/free/observatory/corrections/exclusion",
    "opt_out": "POST kind OPT_OUT to the route; the target is withdrawn from public view at once (a pause). The site's owner makes it permanent at https://www.gaipagents.com/v1/free/observatory/corrections/exclusion.",
    "queued_for_review": 0,
    "route": "https://www.gaipagents.com/v1/free/observatory/corrections"
  },
  "declared_derivations": {
    "data_appetite": null,
    "dependency_domains": [],
    "last_observed_at_utc": "2026-11-12T23:03:07Z",
    "meaning": "Derived by GAIP from what this agent declared, at the stated time: the categories of data its tools' input fields ask for (counts, by keyword rules gaip.data-appetite-rules.v1), the outside domains its declarations point to, and the operator as the agent itself publishes it. Facts about declarations, not an assessment of the agent or its operator.",
    "operator": {
      "as_published": "Beggar Bot",
      "source_kind": "card_provider_organization"
    },
    "rules_version": "gaip.data-appetite-rules.v1",
    "schema_version": "gaip.declared-derivations.v1"
  },
  "latest": {
    "baseline_at_utc": "2026-10-26T12:49:10Z",
    "manifest_sha256": "2cca856c17b55ca178a24a9671bb3ff5c31070dcab74175eb9f34e2b9951feab",
    "observed_at_utc": "2026-11-12T23:03:07Z"
  },
  "metadata_signals": {
    "meaning": "Pattern rules are published only as aggregate rates across all observed targets (see the summary), never per party. GAIP issues no overall verdict and does not rank parties.",
    "overall_verdict": null,
    "per_target_results": null,
    "published": "AGGREGATE_ONLY_IN_SUMMARY",
    "rules": [
      {
        "rationale": "Zero-width, bidirectional-control and Unicode tag characters are not visible to a human reader but are read by language models. GAIP reports whether any occur; many have ordinary uses.",
        "rule_id": "OBS-SIG-001",
        "title": "Invisible or bidirectional-control Unicode characters in names or descriptions"
      },
      {
        "rationale": "Tool and skill descriptions are read by models. GAIP reports whether a description contains phrases shaped like instructions to a model (the patterns in GAIP's public conformance rule catalogue, plus the phrases listed in the Observatory method). Such phrases can be benign.",
        "rule_id": "OBS-SIG-002",
        "title": "Instruction-like text in descriptions"
      },
      {
        "rationale": "When a description refers to a tool name that only a different observed server publishes, a model using both servers may connect the two. GAIP reports whether such a reference occurs; shared names are common and often coincidental.",
        "rule_id": "OBS-SIG-003",
        "title": "Description names a tool published by a different observed server"
      },
      {
        "rationale": "Declared OAuth scopes whose names contain wildcard or whole-account wording (*, all, admin, root, full) request wide access by name. GAIP reports whether such a scope name is declared; it does not know what the scope grants.",
        "rule_id": "OBS-SIG-004",
        "title": "Declared authorization scopes with broad-access wording"
      }
    ],
    "third_party_scanners": [
      {
        "name": "Snyk agent-scan (formerly Invariant Labs mcp-scan)",
        "status": "NOT_RUN",
        "url": "https://github.com/snyk/agent-scan"
      },
      {
        "name": "Cisco AI Defense MCP Scanner",
        "status": "NOT_RUN",
        "url": "https://github.com/cisco-ai-defense/mcp-scanner"
      }
    ]
  },
  "method": "https://www.gaipagents.com/observatory",
  "notice": "Facts observed by GAIP at the stated time (UTC); they may be out of date. This is not an assessment of safety, quality, security, legality or trustworthiness of any party, and not a recommendation. To request a correction, add a right of reply or opt out, POST to https://www.gaipagents.com/v1/free/observatory/corrections or use https://www.gaipagents.com/contact.",
  "price_gbp": 0,
  "schema_version": "gaip.observatory.v1.target",
  "silent_changes_last_30_days": {
    "days": 30,
    "entries_read_at_most": 200,
    "kinds": [],
    "line": null,
    "meaning": "Weeks (ISO) in which GAIP recorded a change to the agent's declared tools or interface (tools added or removed, descriptions re-worded, input or output schema, behaviour labels, sign-in, terms or prices, endpoint host) and no declared version (registry or card version, serverInfo.version) moved that week. A week whose version movement is not recorded is not counted. Dated facts from the public change log; not an assessment of the agent.",
    "weeks": [],
    "weeks_with_silent_changes": 0
  },
  "snapshot": {
    "capabilities": {},
    "description": "Base mainnet USDC payment verification, address/endpoint risk checks, signed receipts, x402 seller health checks, signed delivery attestations, URL-to-markdown fetch, pure-compute utils, public business contacts, batch fetch, data transforms, redirect/security-header tracing, robots/sitemap probe, c",
    "name": "Beggar Bot utilities",
    "parts": [
      "agent_card"
    ],
    "protocol": "A2A",
    "protocolVersion": "0.3.0",
    "provider": {
      "organization": "Beggar Bot",
      "url": "https://beggar-bot-demand.beggarbot.workers.dev/"
    },
    "public_copy": "Text excerpts of at most 300 characters; input schemas and security schemes as SHA-256 and size only.",
    "scopes": [],
    "security": null,
    "securitySchemes": null,
    "skills": [
      {
        "description": "Wallet portfolio enrichment (keyless RPC, \u22642 batches, fails soft): native ETH + balances across 24 curated top Base tokens (USDC, USDbC, USDT, DAI, EURC, USDS, sUSDS, USDe, WETH, cbETH, wstETH, rETH, weETH, cbBTC, AERO, VIRTUAL, DEGEN, BRET",
        "id": "v1_portfolio",
        "name": "/v1/portfolio",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Batch ERC-20 + native balances: \u226425 addresses \u00d7 \u226425 tokens, formatted, totals",
        "id": "v1_erc20balances",
        "name": "/v1/erc20balances",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Native gas balances for up to 10 wallets across Ethereum, Base, Optimism, Arbitrum and Polygon in one call: ETH/POL balance, USD value, tx count and active chains. Check gas before sending or enrich a counterparty. Keyless RPC.",
        "id": "v1_nativebalances",
        "name": "/v1/nativebalances",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Wallet/address risk profile (keyless public RPC, fails soft): EOA vs contract vs EIP-7702 smart-EOA vs proxy (EIP-1967/beacon/1167/Safe) + implementation/delegate, nonce, native + USDC balance, known labels, 0-100 risk band + reasons. chain",
        "id": "v1_addrprofile",
        "name": "/v1/addrprofile",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Address labels: CEX, bridge, DEX, lending, OFAC Tornado + account type heuristics + ENS",
        "id": "v1_walletlabels",
        "name": "/v1/walletlabels",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "EIP-1559 gas fee oracle (keyless RPC, fails soft): next base fee, slow/standard/fast maxFeePerGas + maxPriorityFeePerGas from eth_feeHistory percentiles, congestion + trend, OP-stack L1 data fee upper bound (GasPriceOracle), USD cost of nat",
        "id": "v1_gasfee",
        "name": "/v1/gasfee",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Tx status: success/reverted/pending/nonce gap/replaced/not_found, confirmations, safe_to_ship; or address nonce + stuck-tx hint (keyless RPC)",
        "id": "v1_txstatus",
        "name": "/v1/txstatus",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Transaction summary for agents (keyless RPC or supplied receipt JSON): status, method decode, fee incl. L2 L1-fee, every ERC-20/721/1155 transfer + approval, net token flows per address, sender net, flags (reverted, broad approval granted),",
        "id": "v1_txsummary",
        "name": "/v1/txsummary",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "ENS enrich: normalize (homoglyph, zero-width, punycode flags), namehash, labelhash, .eth ERC-721 + NameWrapper token ids; live resolver/owner/addr/url/contenthash, or address -> forward-verified primary name (keyless Ethereum RPC, fails sof",
        "id": "v1_ens",
        "name": "/v1/ens",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Basenames (*.base.eth) forward/reverse: address, owner, resolver, avatar/url/twitter, token id; reverse primary name forward-verified (keyless Base RPC)",
        "id": "v1_basename",
        "name": "/v1/basename",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "On-chain token price, \u22644 tokens/call (keyless public RPC, one batch, fails soft): Uniswap v3 pools (1/5/30/100 bps) + Aerodrome volatile/stable pools vs USDC and WETH, addresses derived by CREATE2 (no indexer/API key); spot USD price from t",
        "id": "v1_tokenprice",
        "name": "/v1/tokenprice",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "ERC-20 token metadata enrichment, batch \u226420 in one call (keyless public RPC, fails soft): name, symbol (string or bytes32), decimals, total supply formatted, optional holder balance, ERC-721 detect, labels; flags spam-like names/URLs, unlab",
        "id": "v1_tokeninfo",
        "name": "/v1/tokeninfo",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "DefiLlama protocol TVL, fees, revenue, fees/TVL; or chain TVL rank",
        "id": "v1_defistats",
        "name": "/v1/defistats",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Chain TVL leaderboard: rank, TVL USD, share of total DeFi TVL for every chain; filter by chain list. DefiLlama keyless.",
        "id": "v1_chaintvl",
        "name": "/v1/chaintvl",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Protocol fees and revenue: 24h/7d/30d/all-time, revenue capture, annualized fees, daily series",
        "id": "v1_protocolfees",
        "name": "/v1/protocolfees",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Protocol fees leaderboard per chain: 24h/7d fees paid, 1d change, top protocols by fees with share %. Base default. Keyless.",
        "id": "v1_chainfees",
        "name": "/v1/chainfees",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Top protocols by fees or revenue, overall or per chain/category, with share and 1d change",
        "id": "v1_feesrank",
        "name": "/v1/feesrank",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "On-chain DEX swap quote: Uniswap v3 QuoterV2 exact-input across 0.01/0.05/0.3/1% fee tiers -> best amount out, price, gas estimate. Symbols (USDC, WETH, cbBTC, AERO, USDT, DAI) or any ERC-20 address. Keyless RPC. Base default; ethereum, arb",
        "id": "v1_dexquote",
        "name": "/v1/dexquote",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "On-chain Uniswap v3 QuoterV2 quote across all fee tiers for a direct pair: amount out, price, ticks crossed, gas.",
        "id": "v1_uniquote",
        "name": "/v1/uniquote",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Compare KyberSwap, Velora, LI.FI and CoW quotes for one swap and point to the builder for the best",
        "id": "v1_swapbest",
        "name": "/v1/swapbest",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Solana swap quote via Jupiter: amount out, min out after slippage, price, price impact, USD value and route (AMMs/pools)",
        "id": "v1_solquote",
        "name": "/v1/solquote",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Weather now + forecast by city or lat/lon: temperature, feels-like, humidity, wind/gusts, precip, cloud, conditions; up to 16 daily forecasts with precip probability, UV, sunrise/sunset; metric or imperial. Open-Meteo.",
        "id": "v1_weather",
        "name": "/v1/weather",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Batch uptime check for up to 10 URLs: up/down, HTTP status, latency ms, TLS handshake ok, redirect location, server, optional keyword/expected-status assertion. SSRF-safe.",
        "id": "v1_uptime",
        "name": "/v1/uptime",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Fetch a public http(s) URL and return clean readable markdown + title + links + publish date (SSRF-safe, honours robots.txt, 1MB/8s caps, UA BeggarBot-Fetch/1.0)",
        "id": "v1_fetch",
        "name": "/v1/fetch",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Solana wallet balance: SOL + all SPL and Token-2022 token accounts (mint, symbol for majors like USDC/USDT/JUP/BONK, ui amount, decimals, frozen). Public mainnet RPC, keyless.",
        "id": "v1_solbalance",
        "name": "/v1/solbalance",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Approval/permit risk decoder: approve/increaseAllowance/setApprovalForAll/EIP-2612 permit/Permit2 approve calldata or EIP-712 typed data (Permit, PermitSingle, PermitBatch, PermitTransferFrom, EIP-3009) -> spender label, UNLIMITED/NO_EXPIRY",
        "id": "v1_allowance",
        "name": "/v1/allowance",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "x402 402-challenge validator, pure compute, zero outbound: paste a 402 JSON body, base64 PAYMENT-REQUIRED header, accepts[] or /.well-known/x402 doc; checks x402Version, scheme, network (Base/EVM/Solana, CAIP-2), atomic amount, payTo EIP-55",
        "id": "v1_x402check",
        "name": "/v1/x402check",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Risk score for a Base mainnet address (default; network=base-sepolia optional) or an x402 endpoint manifest",
        "id": "v1_risk",
        "name": "/v1/risk",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Did a USDC payment from payer to payee for exact amount land on Base mainnet (default) or Base Sepolia via network=base-sepolia (invoice echo)",
        "id": "v1_verify",
        "name": "/v1/verify",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Live x402 seller health: discovery + unpaid 402 challenge; reachable, TLS, schema, network, asset, payTo, price, latency (SSRF-safe, no chain reads)",
        "id": "v1_seller_health",
        "name": "/v1/seller-health",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "NFT token decode (ERC-721/1155, keyless RPC): standard via ERC-165, collection name/symbol, owner, tokenURI/uri with {id} substitution, ipfs/ar gateway + inline data:application/json base64 metadata decode (name, image, attributes), ERC-298",
        "id": "v1_nftmeta",
        "name": "/v1/nftmeta",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "USDC amount converter, pure compute: decimal <-> atomic (6 decimals) with precision guard, x402 maxAmountRequired/amount strings, native USDC contract + EIP-55 checksum + EIP-712 domain per chain (Base, Base Sepolia, Ethereum, Arbitrum, Opt",
        "id": "v1_usdcamount",
        "name": "/v1/usdcamount",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "x402 payment header debugger, pure compute, zero outbound: decode an X-PAYMENT (v1) or PAYMENT-SIGNATURE (v2) value, recover the EIP-3009 signer, check time window, and match to/value/network/asset against the 402 requirements (body, PAYMEN",
        "id": "v1_paymentheader",
        "name": "/v1/paymentheader",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "EVM calldata / ABI decoder, pure compute, zero outbound: auto-detects ~45 common selectors (ERC-20/721/1155, Uniswap v2/v3, EIP-3009 USDC, permit, Aave, Multicall) or uses your sig(s)/JSON ABI; nested tuples & arrays; checksummed addresses;",
        "id": "v1_abidecode",
        "name": "/v1/abidecode",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Combined ERC-20 safety score 0-100 + grade: proxy/owner/mint/blacklist/pause/selfdestruct controls, token metadata, DefiLlama price + confidence, curated label. One call pre-trade check. Keyless.",
        "id": "v1_tokensafety",
        "name": "/v1/tokensafety",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Revoke checker: live ERC-20 allowance matrix for a wallet across major tokens (USDC/USDT/WETH/DAI) x well-known spenders (Permit2, Uniswap, 1inch, 0x, CoW, Paraswap, Kyber, Odos) plus your own tokens/spenders; flags unlimited approvals. Bas",
        "id": "v1_approvals",
        "name": "/v1/approvals",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "DNS + email-auth + TLS intel for one public hostname: A/AAAA/CNAME/MX/TXT/NS/CAA via Cloudflare DoH, parsed SPF (policy, includes, lookup count) and DMARC (p, sp, pct, rua), HTTPS handshake check and cert issuer/expiry/days_remaining from C",
        "id": "v1_netintel",
        "name": "/v1/netintel",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "EIP-3009 transferWithAuthorization / receiveWithAuthorization checker, pure compute, zero outbound: USDC EIP-712 domain per chain (Base, Base Sepolia, Ethereum, Arbitrum, Optimism, Polygon, Avalanche), digest, signer recovery vs from, valid",
        "id": "v1_eip3009",
        "name": "/v1/eip3009",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Ed25519-signed, hash-chained receipt for a verified Base mainnet USDC payment (default; network=base-sepolia optional)",
        "id": "v1_receipt",
        "name": "/v1/receipt",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Verify a receipt signature (free; GET or empty POST returns usage + a live signed sample)",
        "id": "v1_receipt_verify",
        "name": "/v1/receipt/verify",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Ed25519-signed delivery attestation: seller URL + verified Base USDC settlement tx + optional response sha256",
        "id": "v1_delivery_attest",
        "name": "/v1/delivery-attest",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Verify a delivery attestation signature (free)",
        "id": "v1_delivery_attest_verify",
        "name": "/v1/delivery-attest/verify",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Recursive batch-calldata decoder, pure compute: Multicall3 aggregate/aggregate3/aggregate3Value/tryAggregate, multicall(bytes[]) (Uniswap/routers), Safe execTransaction + multiSend (packed, DELEGATECALL flag), ERC-4337/7579 execute/executeB",
        "id": "v1_batchdecode",
        "name": "/v1/batchdecode",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Safe multisig transaction checker: safeTxHash (EIP-712, domain by Safe VERSION, verified vs on-chain getTransactionHash) or SafeMessage hash; parses concatenated signatures (ECDSA, eth_sign, EIP-1271 contract, approved hash) and recovers ow",
        "id": "v1_safetx",
        "name": "/v1/safetx",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "EIP-2612 / Permit2 / EIP-3009 typed-data risk check: digest, signer vs owner, unlimited, expiry, spender label, chain/verifyingContract mismatch; verdict. Pure compute",
        "id": "v1_permitcheck",
        "name": "/v1/permitcheck",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Contract/token risk scan: bytecode selectors (mint, blacklist, pause, fees, max-tx, trading toggle), selfdestruct/delegatecall, proxy + impl scan, owner/renounced/paused; risk_score (keyless RPC)",
        "id": "v1_contractrisk",
        "name": "/v1/contractrisk",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Can wallet pay N USDC: USDC + gas across 5 chains, x402/onchain can_pay, shortfall, best chain (keyless RPC)",
        "id": "v1_paycheck",
        "name": "/v1/paycheck",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "EIP-4361 SIWE parse + verify: fields, EIP-55, nonce, expiry, domain/nonce/chain match, signer recovery. Pure compute",
        "id": "v1_siwe",
        "name": "/v1/siwe",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Address-poisoning / look-alike guard, pure compute: \u226450 addresses vs address book (known[]), intended recipient and well-known contracts by prefix/suffix similarity; EIP-55 checksum tamper, zero/burn/precompile, vanity; verdict block|mismat",
        "id": "v1_addrpoison",
        "name": "/v1/addrpoison",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Ethereum signature signer recovery, pure compute, zero outbound: EIP-191 personal_sign/eth_sign message, EIP-712 typed data (SIWE-adjacent, Permit/Permit2, orders; domain separator + struct hash + encodeType), or raw 32-byte hash; 65-byte o",
        "id": "v1_sigrecover",
        "name": "/v1/sigrecover",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Raw signed EVM transaction decoder, pure compute, zero outbound: legacy/EIP-155, EIP-2930, EIP-1559, EIP-4844, EIP-7702; tx hash (keccak), secp256k1 sender recovery (from + public key), chain (Base/ETH/OP/Arb\u2026), nonce, gas & max cost in ETH",
        "id": "v1_evmtx",
        "name": "/v1/evmtx",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "EVM event log decoder, pure compute, zero outbound: topics+data or a receipt's logs[] \u2192 named events (ERC-20/721/1155 Transfer/Approval, WETH, Uniswap V2/V3 Swap/Sync/Mint/PoolCreated, proxy Upgraded, AccessControl, USDC EIP-3009, Permit2, ",
        "id": "v1_evmlog",
        "name": "/v1/evmlog",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "ERC-4337 UserOperation decoder + hasher, pure compute, zero outbound: v0.6, v0.7 and v0.8 (EIP-712) userOpHash for any chain/EntryPoint, packed/unpacked conversion, factory/paymaster split, gas limits and max cost, callData decode (execute/",
        "id": "v1_userop",
        "name": "/v1/userop",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "EVM address toolkit, pure compute, zero outbound: EIP-55 checksum (batch \u2264100), CREATE (deployer+nonce), CREATE2 (deployer+salt+init_code or hash), CREATE3 (Solady/ZeroDev style) address prediction, ENS namehash/labelhash/token ids, uncompr",
        "id": "v1_evmaddr",
        "name": "/v1/evmaddr",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Solana transaction decoder, pure compute, zero outbound: base64/base58 legacy or v0 tx (or message) \u2192 accounts with signer/writable flags, address-lookup-table refs, decoded System / SPL Token / Token-2022 / ATA / ComputeBudget / Memo instr",
        "id": "v1_soltx",
        "name": "/v1/soltx",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "One payment, up to 10 URLs: fetch (markdown), contacts, or both per item. Sequential, shared robots.txt cache, \u226440 outbound subrequests per batch (Workers Free 50 cap); per-item errors don't fail the batch",
        "id": "v1_batch",
        "name": "/v1/batch",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Public business contacts from one public URL: mailto/tel links, JSON-LD Organization contactPoint/sameAs, visible emails, social profile links (x, linkedin, github, ...). Page-public data only, no crawling/enrichment; same SSRF/robots.txt/1",
        "id": "v1_contacts",
        "name": "/v1/contacts",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Pure-compute utilities, zero outbound. op = hash (input, algorithm sha1|sha256|sha384|sha512, encoding? utf8|base64) | uuid (count\u2264100) | base64_encode (input, url_safe?) | base64_decode (input) | json_validate (input) | json_diff (a, b \u2192 J",
        "id": "v1_util",
        "name": "/v1/util",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Redirect chain tracer + security-header grade for one public URL: every hop (status, location, latency), loop / HTTPS-downgrade / http\u2192https detection, final status, and HSTS/CSP/XFO/nosniff/Referrer/Permissions-Policy grade A\u2013F with issues",
        "id": "v1_redirects",
        "name": "/v1/redirects",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "robots.txt + sitemap probe for one public site: parsed robots groups (allow/disallow/crawl-delay), Sitemap: directives, allow/deny check for a path+user_agent, and sitemap/sitemapindex URLs with lastmod (\u22646 fetches, \u22645000 URLs, SSRF-safe; g",
        "id": "v1_sitemap",
        "name": "/v1/sitemap",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Pure-compute data transforms, zero outbound: op = csv_to_json (input CSV, delimiter?, header?, infer_types?) | json_to_csv (input array, columns?, nested keys flattened) | flatten | unflatten (separator?) | pick (paths dot/[i], each?) | sor",
        "id": "v1_transform",
        "name": "/v1/transform",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Cron expression validate + plain-English explain + next N fire times in any IANA timezone (DST-aware), pure compute, zero outbound: 5-field cron (names jan-dec/sun-sat, ranges, steps, lists) or @hourly/@daily/@weekly/@monthly/@yearly; Vixie",
        "id": "v1_cronparse",
        "name": "/v1/cronparse",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Image probe: format, dimensions, bit depth, animation, DPI and EXIF (camera, lens, exposure, timestamps, orientation, GPS with privacy warning) for PNG/JPEG/GIF/WebP/BMP/TIFF/AVIF/HEIF/SVG; public URL (SSRF-safe, 4 MB cap) or base64",
        "id": "v1_imgmeta",
        "name": "/v1/imgmeta",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Audio/video header probe: duration, codecs, resolution, sample rate, channels, bitrate for MP4/MOV/M4A, WAV, MP3 (Xing/VBRI/CBR), FLAC, Ogg (Opus/Vorbis); public URL (SSRF-safe, 4 MB ranged read) or base64; no transcoding",
        "id": "v1_avmeta",
        "name": "/v1/avmeta",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "QR code generator, pure compute: UTF-8 text/URL to SVG (+data URI) or module matrix, EC level L/M/Q/H, versions 1-40, auto mask, custom colors/scale/border",
        "id": "v1_qr",
        "name": "/v1/qr",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "SVG sanitizer, pure compute, zero outbound: allowlist-based removal of <script>, on* handlers, foreignObject, DOCTYPE/ENTITY (XXE), javascript:/data:/external hrefs and CSS url()/expression/@import; returns clean SVG + data URI + per-elemen",
        "id": "v1_svgsanitize",
        "name": "/v1/svgsanitize",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Subtitle toolkit, pure compute, zero outbound: SRT / WebVTT parse, validate (overlaps, order, reading speed, line length, durations) and convert to SRT/VTT/JSON/plain transcript; retime by shift_ms, scale, fps conversion (e.g. 25\u219223.976) or",
        "id": "v1_subtitle",
        "name": "/v1/subtitle",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Keyless EVM JSON-RPC proxy, allowlisted methods, batch \u226420, multi-RPC failover; base/ethereum/optimism/arbitrum/polygon",
        "id": "v1_evmrpc",
        "name": "/v1/evmrpc",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Polymarket prediction-market odds snapshot: top markets by 24h volume, keyword search, or slug -> outcomes with implied probability %, best bid/ask, last trade, 1d change, volume, liquidity, end date. Keyless gamma API.",
        "id": "v1_polymarket",
        "name": "/v1/polymarket",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Block <-> time converter: unix/ISO timestamp -> exact block at or before that time (interpolation search), or block -> timestamp, confirmations, age. Keyless RPC. Base default; ethereum, optimism, arbitrum, polygon.",
        "id": "v1_blocktime",
        "name": "/v1/blocktime",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Crypto news digest: Cointelegraph, CoinDesk, Decrypt, The Block RSS merged, deduped, filtered by keywords/tickers and time window, newest first, per-keyword counts.",
        "id": "v1_cryptonews",
        "name": "/v1/cryptonews",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "DeFi yield pool screener (DefiLlama): top APY pools by chain, asset symbol, project; min TVL/APY, stablecoin-only, no-IL filters; base vs reward APY, 30d mean, 7d change, risk flags.",
        "id": "v1_yieldpools",
        "name": "/v1/yieldpools",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Stablecoin depeg monitor: price vs peg, deviation %, depeg flags at your threshold, circulating supply + 1d/7d supply change, top chains. USDC, USDT, DAI, USDS, USDe, FDUSD, PYUSD, USD1, RLUSD, FRAX or any symbol. DefiLlama keyless.",
        "id": "v1_pegcheck",
        "name": "/v1/pegcheck",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Chainlink oracle price read on-chain (keyless RPC): latestRoundData for ETH, BTC, USDC, USDT, DAI, LINK, cbETH, EUR/USD feeds or any feed address -> price, decimals, round, updated_at, age, STALE flag. Base default; ethereum.",
        "id": "v1_oracleprice",
        "name": "/v1/oracleprice",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Fiat FX rates (ECB reference via Frankfurter): base currency -> any ISO 4217 symbols, optional amount conversion and historical date. For agents pricing in USD/EUR/GBP.",
        "id": "v1_fxrate",
        "name": "/v1/fxrate",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Simulate a contract read/call (eth_call) without broadcasting: pass sig+args (e.g. balanceOf(address)) or raw data, get return data decoded to your types, revert reason (Error/Panic/custom), and gas estimate. Base default; ethereum, optimis",
        "id": "v1_simcall",
        "name": "/v1/simcall",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Address nonce: latest vs pending nonce, pending tx count, next_nonce to use, account type (EOA / contract / EIP-7702 delegated EOA + delegate address), balance, stuck-tx hints. Keyless RPC. Base default.",
        "id": "v1_nonce",
        "name": "/v1/nonce",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "ERC-20 Transfer activity over a recent block window (<=2000 blocks): transfer & tx count, unique senders/receivers/addresses, mints, burns, volume, top senders/receivers. Not a full holder list. Keyless RPC. Base default.",
        "id": "v1_tokenholders",
        "name": "/v1/tokenholders",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Domain WHOIS via RDAP: registered?, registrar + IANA id, abuse email, created/updated/expires, age days, days to expiry, status codes, nameservers, DNSSEC, flags (new domain <30d, expiring, hold). For phishing/vendor checks.",
        "id": "v1_whois",
        "name": "/v1/whois",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      },
      {
        "description": "Parse any public RSS/Atom feed: normalized items (title, url, published, author, summary, categories), keyword filter with counts, time window, newest first. SSRF-safe fetch.",
        "id": "v1_feedparse",
        "name": "/v1/feedparse",
        "tags": [
          "x402",
          "base",
          "usdc"
        ]
      }
    ],
    "supportedInterfaces": [],
    "url": "https://beggar-bot-demand.beggarbot.workers.dev/a2a",
    "version": "0.3.1"
  },
  "status_history": [
    {
      "manifest_partial": false,
      "manifest_parts": [
        "agent_card"
      ],
      "manifest_sha256": "2cca856c17b55ca178a24a9671bb3ff5c31070dcab74175eb9f34e2b9951feab",
      "observed_at_utc": "2026-11-12T23:03:07Z",
      "protocol_version": "0.3.0"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "agent_card"
      ],
      "manifest_sha256": "2cca856c17b55ca178a24a9671bb3ff5c31070dcab74175eb9f34e2b9951feab",
      "observed_at_utc": "2026-11-11T21:12:11Z",
      "protocol_version": "0.3.0"
    },
    {
      "manifest_partial": false,
      "manifest_parts": [
        "agent_card"
      ],
      "manifest_sha256": "2cca856c17b55ca178a24a9671bb3ff5c31070dcab74175eb9f34e2b9951feab",
      "observed_at_utc": "2026-11-10T20:00:21Z",
      "protocol_version": "0.3.0"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "agent_card"
      ],
      "manifest_sha256": "2cca856c17b55ca178a24a9671bb3ff5c31070dcab74175eb9f34e2b9951feab",
      "observed_at_utc": "2026-11-09T09:46:43Z",
      "protocol_version": "0.3.0"
    },
    {
      "manifest_partial": null,
      "manifest_parts": [
        "agent_card"
      ],
      "manifest_sha256": "de15633865145b97f7e2f4ecf204cc458170fe733a170fa8709f8f504ef35408",
      "observed_at_utc": "2026-10-26T12:49:10Z",
      "protocol_version": null
    }
  ],
  "target": {
    "corrections_route": "https://www.gaipagents.com/v1/free/observatory/corrections",
    "first_seen_at_utc": "2026-10-26T10:55:32Z",
    "kind": "A2A_CARD",
    "last_observed_at_utc": "2026-11-12T23:03:07Z",
    "locator": "https://beggar-bot-demand.beggarbot.workers.dev/.well-known/agent-card.json",
    "name": "beggar-bot-demand.beggarbot.workers.dev",
    "source": "global-a2a-registry",
    "target_id": "obs_1d58b7f9071398115773df57"
  }
}