{
  "version": "0.1",
  "kits": [
    {
      "kit": "0.1",
      "id": "seenly.pay-guard",
      "version": "0.1.0",
      "name": "Pay Guard — pre-payment allow/warn/block + Seller Wallet Reputation",
      "summary": "Before your agent signs an x402 402: check payTo↔verified domain, price/asset/network, lookalike/URL safety, and wash flags. Returns allow|warn|block. Bundled Seller Wallet Reputation ($0.02) for distinct buyers, top-buyer share, wash flags, trust score. Deterministic, no LLM. Missing data → warn (not block).",
      "category": [
        "security_verification",
        "developer_tools"
      ],
      "seller": {
        "name": "Seenly",
        "domain": "seenly-pay-guard.vercel.app",
        "url": "https://seenly-pay-guard.vercel.app",
        "verify": "well-known",
        "contact": "hello@agentropolis.io",
        "test_wallets": [
          "0xcaA54748dA198081A89b6f369d798Ad78FC35B83"
        ]
      },
      "invoke": [
        {
          "kind": "http",
          "method": "POST",
          "url": "https://seenly-pay-guard.vercel.app/api/guard",
          "openapi": "https://seenly-pay-guard.vercel.app/openapi.json#/paths/~1api~1guard/post",
          "content_types": [
            "application/json"
          ]
        },
        {
          "kind": "http",
          "method": "POST",
          "url": "https://seenly-pay-guard.vercel.app/api/reputation",
          "openapi": "https://seenly-pay-guard.vercel.app/openapi.json#/paths/~1api~1reputation/post",
          "content_types": [
            "application/json"
          ]
        },
        {
          "kind": "http",
          "method": "GET",
          "url": "https://seenly-pay-guard.vercel.app/api/reputation?payTo={payTo}"
        },
        {
          "kind": "a2a",
          "url": "https://seenly-pay-guard.vercel.app/.well-known/agent-card.json",
          "skill": "pay-guard-quote",
          "note": "quote/instructions only; paid calls are the HTTP invokes"
        }
      ],
      "input_schema": {
        "$ref": "https://seenly-pay-guard.vercel.app/openapi.json#/components/schemas/GuardRequest"
      },
      "output_schema": {
        "$ref": "https://seenly-pay-guard.vercel.app/openapi.json#/components/schemas/GuardResult"
      },
      "sample": {
        "input": {
          "domain": "seenly-payload-check.vercel.app",
          "max_price_usd": 0.05,
          "challenge": {
            "payTo": "0xeE6239F3E17bEBe5e89F21F29D74D68CAa0d78CE",
            "amount": "30000",
            "network": "eip155:8453",
            "resource": "https://seenly-payload-check.vercel.app/api/check"
          }
        },
        "output_url": "https://seenly-pay-guard.vercel.app/samples/guard-allow.json"
      },
      "offers": [
        {
          "rail": "x402",
          "scheme": "exact",
          "network": "eip155:8453",
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "amount": "10000",
          "price_usd": "0.01",
          "payTo": "0xeE6239F3E17bEBe5e89F21F29D74D68CAa0d78CE",
          "charge_on": "success",
          "environment": "live",
          "path": "/api/guard",
          "name": "Pay Guard"
        },
        {
          "rail": "x402",
          "scheme": "exact",
          "network": "eip155:8453",
          "asset": "USDC",
          "asset_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "amount": "20000",
          "price_usd": "0.02",
          "payTo": "0xeE6239F3E17bEBe5e89F21F29D74D68CAa0d78CE",
          "charge_on": "success",
          "environment": "live",
          "path": "/api/reputation",
          "name": "Seller Wallet Reputation"
        }
      ],
      "trial": {
        "type": "sample",
        "sample_url": "https://seenly-pay-guard.vercel.app/samples/guard-allow.json",
        "free_calls_per_wallet": 0,
        "free_allowance": {
          "available": true,
          "per_caller_per_day": 5,
          "global_per_day": 150,
          "window": "UTC day (resets 00:00 UTC)",
          "how": "Add header \"X-Free-Allowance: use\" (or ?free=1) to a valid request. If you have free calls left it runs with no payment; otherwise you get this same x402 402.",
          "caller": "per client network: IPv4 /24 or IPv6 /64 (hashed, never stored raw)",
          "applies_to": [
            "POST /api/guard",
            "POST /api/reputation"
          ],
          "note": "Free calls are not sales and never count toward settlements or trust. Calls through the Agentropolis relay always use x402."
        }
      },
      "behavior": {
        "side_effects": "none",
        "idempotent": true,
        "deterministic": true,
        "p95_latency_s": 3,
        "data_retention": "none (request processed in memory, never stored or logged)",
        "max_payload_kb": 64,
        "rate_limit": "60/min per client IP"
      },
      "limits": {
        "payload": "up to 64 KB per call",
        "bulk": "not yet (one check per call)"
      },
      "policy": {
        "refund": "Not charged on failure (x402 settles only after a successful response); invalid requests are rejected before payment.",
        "data": "Your request is processed in memory and never stored, logged or used for training. Agentropolis public APIs are read for seller trust data.",
        "coverage": "When Agentropolis has no listing for a domain/payTo, checks return warn with coverage_limited — never a false block."
      },
      "contact": {
        "email": "hello@agentropolis.io",
        "a2a": "https://seenly-pay-guard.vercel.app/.well-known/agent-card.json"
      },
      "discovery": {
        "openapi": "https://seenly-pay-guard.vercel.app/openapi.json",
        "llms_txt": "https://seenly-pay-guard.vercel.app/llms.txt",
        "x402": "https://seenly-pay-guard.vercel.app/.well-known/x402"
      }
    }
  ]
}