{
  "name": "txs.quest",
  "version": 1,
  "description": "Public build surface for txs.quest: onchain badge registry, network manifests, claim routes, and optional self-hosted proof services.",
  "site": "https://txs.quest",
  "routes": {
    "home": "https://txs.quest/",
    "search": "https://txs.quest/search/",
    "claim": "https://txs.quest/claim",
    "world": "https://txs.quest/world",
    "about": "https://txs.quest/about",
    "build": "https://txs.quest/build"
  },
  "docs": {
    "openapi": "https://txs.quest/openapi.json",
    "agentSkillsIndex": "https://txs.quest/.well-known/agent-skills/index.json",
    "agentSkill": "https://txs.quest/.well-known/agent-skills/txs-quest/SKILL.md",
    "skill": "https://txs.quest/skill.md",
    "llms": "https://txs.quest/llms.txt",
    "llmsFull": "https://txs.quest/llms-full.txt"
  },
  "integration": {
    "canonicalReadSurface": "onchain",
    "publicHostedApi": false,
    "operatorServices": "self-hosted",
    "notes": [
      "Badge ownership and definitions are canonical onchain.",
      "Claim pages and viewer routes are public and stable.",
      "txs.quest publicly hosts oracle-backed x402 provider verification for Base agents via x402scan-backed service activity.",
      "Buyer-side x402 payment-history proofs remain optional and self-hosted instead of being implied by the public app."
    ]
  },
  "publicApis": {
    "searchIndex": {
      "url": "https://txs.quest/api/search-index",
      "supports": [
        "network",
        "verification",
        "role",
        "requiredBadge",
        "evidence",
        "identity"
      ]
    },
    "worldHealth": {
      "url": "https://txs.quest/api/world/health"
    },
    "profileSummary": {
      "url": "https://txs.quest/api/profile-summary"
    },
    "badgeLookup": {
      "url": "https://txs.quest/api/badge-lookup"
    }
  },
  "networks": [
    {
      "id": "base-mainnet",
      "environment": "mainnet",
      "manifestUrl": "https://txs.quest/networks/base-mainnet.json",
      "viewerBaseUrl": "https://txs.quest",
      "claimPageBaseUri": "https://txs.quest/?deployment=/networks/base-mainnet.json",
      "chainId": "8453",
      "rpcUrl": "https://base-rpc.publicnode.com",
      "contracts": {
        "agenticBadgeRegistry": "0xc250847e51b6263bbe2a917da848ef656c8cbf84",
        "badgeAssetRegistry": "0x4ebd904c8e2fba8e3b4c1a6137d453ac6231a390",
        "badgeClaimRenderer": "0x11c56cbe82fa17d3aacc6528d26109e4ae0e1cd2",
        "identityRegistry": "0xfbda3d18ddb4c21b508edda33a16f21e0c89b081",
        "reputationRegistry": "0x7aff79348ff734d572c61a04e9e7a5dcc5f9a10f"
      }
    },
    {
      "id": "tempo-mainnet",
      "environment": "mainnet",
      "manifestUrl": "https://txs.quest/networks/tempo-mainnet.json",
      "viewerBaseUrl": "https://txs.quest",
      "claimPageBaseUri": "https://txs.quest/?deployment=/networks/tempo-mainnet.json",
      "chainId": "4217",
      "rpcUrl": "https://rpc.tempo.xyz",
      "contracts": {
        "agenticBadgeRegistry": "0x0818a68a675d4d721f60518f3da4984b18f72fe3",
        "badgeAssetRegistry": "0x4c1283ef833d3908c336d14024c4d8044f86d257",
        "badgeClaimRenderer": "0x2b1f6dca8e7a2eee26c2e91b6b15385a43ef0af2",
        "identityRegistry": "0xb5b2fa95dd08eb9954973b26a225174cd881b47c",
        "reputationRegistry": "0x222e664ffdf3aefbdf97971ad24da845f51bc5cf"
      }
    }
  ],
  "contracts": {
    "agenticBadgeRegistry": {
      "readMethods": [
        "nextDefinitionId()",
        "definitions(uint256)",
        "claims(uint256,address)",
        "claimURI(address,uint256)",
        "assetRegistry()",
        "identityRegistry()",
        "reputationRegistry()",
        "claimPageBaseUri()"
      ],
      "writeMethods": [
        "claim(uint256,bytes)",
        "defineBadge(string,string,uint256,uint8,uint8,bytes,uint256,uint64,bytes)",
        "updateBadgeVerification(uint256,uint8,bytes,bytes)",
        "setAttestor(address,bool)"
      ]
    },
    "badgeAssetRegistry": {
      "readMethods": [
        "getAsset(uint256)"
      ],
      "writeMethods": [
        "registerAsset((string,string,string,bytes32,bytes32,string,uint32))",
        "updateAsset(uint256,(string,string,string,bytes32,bytes32,string,uint32))"
      ]
    }
  },
  "schemas": {
    "paymentHistoryProof": "agentic-poap.payment-history.v1",
    "x402HistoryProof": "agentic-poap.x402-history.v1",
    "paymentHistoryCriteria": "agentic-poap.payment-history.criteria.v1",
    "x402HistoryCriteria": "agentic-poap.x402-history.criteria.v1",
    "paymentWalletAuth": "agentic-poap.payment-history.auth.v1",
    "x402WalletAuth": "agentic-poap.x402-history.auth.v1"
  },
  "optionalServices": {
    "oracleProof": {
      "publicHosted": true,
      "entrypoint": "scripts/oracle-proof-server.mjs",
      "routes": {
        "proof": "POST /api/oracle/proof",
        "health": "GET /api/oracle/health"
      },
      "purpose": "Issue 8183 oracle proofs for reusable criteria, including public x402 provider activity on Base."
    },
    "internalServiceActivity": {
      "publicHosted": true,
      "entrypoint": "scripts/internal-service-backend.mjs",
      "routes": {
        "query": "POST /api/internal-service/query",
        "health": "GET /api/internal-service/health"
      },
      "purpose": "Serve x402scan-backed service activity snapshots for provider-side Base/x402 badges."
    },
    "paymentProof": {
      "publicHosted": false,
      "entrypoint": "scripts/x402-proof-server.mjs",
      "routes": {
        "proof": "POST /api/x402/proof",
        "health": "GET /api/x402/health",
        "flow": "GET /api/x402/flow",
        "decisions": "GET /api/x402/admin/decisions"
      },
      "purpose": "Issue 8183 proofs on demand only when an actively connected agent tries to claim a payment-backed badge."
    },
    "paymentHistoryBackend": {
      "publicHosted": false,
      "entrypoint": "scripts/payment-history-backend.mjs",
      "routes": {
        "query": "POST /api/payment-history/query",
        "health": "GET /api/payment-history/health"
      },
      "purpose": "Return raw x402 and optional MPP activity to the proof service."
    },
    "mppMint": {
      "publicHosted": true,
      "entrypoint": "web/public/_worker.js -> upstream MPP service",
      "routes": {
        "claim": "POST /api/mint/claim",
        "health": "GET /api/mint/health"
      },
      "purpose": "Handle paid minting flows for badges that use an MPP path through the txs.quest public worker surface."
    }
  },
  "builderPaths": [
    "Read the network manifest.",
    "Read badge definitions and claims from AgenticBadgeRegistry.",
    "Use claimURI and txs.quest claim/profile pages as public share surfaces.",
    "Self-host proof or mint services only if your badge logic depends on private or paid activity."
  ]
}
