{
  "protocolVersion": "1.0",
  "name": "Access0x1 Payment Agent",
  "description": "An autonomous, non-custodial payment agent. It acts for a verified human (World ID) within a budget-capped, time-bounded, owner-revocable on-chain mandate (SessionGrant, ERC-7702/6492), and settles on the x402 / EIP-3009 rail (Circle Nanopayments on Arc). This A2A Agent Card is the interop surface; the verification truth is on-chain.",
  "url": "https://access0x1.xyz/api/agent",
  "preferredTransport": "JSONRPC",
  "version": "0.1.0",
  "documentationUrl": "https://access0x1.xyz/docs/agent",
  "provider": {
    "organization": "Access0x1",
    "url": "https://access0x1.xyz"
  },
  "iconUrl": "https://access0x1.xyz/icon.png",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false,
    "extensions": [
      {
        "uri": "https://ap2.dev/extensions/payments/v0.2",
        "description": "AP2 (Agent Payments Protocol) — proves bounded user consent via a W3C Verifiable Credential mandate chain (Intent -> Cart -> Payment). Access0x1 expresses its on-chain SessionGrant authorization AS an AP2 Intent Mandate; derive the mandate chain at the endpoint below.",
        "required": false,
        "params": {
          "mandateEndpoint": "https://access0x1.xyz/api/ap2/mandate",
          "intentMandateSource": "Access0x1.SessionGrant",
          "mandateChain": ["IntentMandate", "CartMandate", "PaymentMandate"]
        }
      },
      {
        "uri": "https://x402.org/extensions/ap2-x402/v1",
        "description": "x402 / EIP-3009 stablecoin settlement rail (the same rail AP2's x402 extension uses). Gasless for the payer at the Circle Nanopayments batch layer on Arc Testnet; real USDC, zero custody.",
        "required": false,
        "params": {
          "scheme": "exact",
          "network": "eip155:5042002",
          "asset": "0x3600000000000000000000000000000000000000",
          "facilitator": "https://gateway-api-testnet.circle.com"
        }
      },
      {
        "uri": "https://eips.ethereum.org/EIPS/eip-7715",
        "description": "ERC-7715 / ERC-7710 spend-permissions interop (the emerging wallet spend-permissions standard). Access0x1's on-chain SessionGrant IS the standards twin: a 7715 wallet_requestExecutionPermissions grant maps onto SessionGrant.openSessionFor, the opaque 7715 `context` = abi.encode(address sessionGrant, bytes32 sessionId), and an ERC-7710 redeemDelegations redemption maps onto SessionGrant.spend. OFF-CHAIN interop seam today (SessionGrant already does the cryptography); the on-chain 7710 router facade is deferred post-event. Grant in any 7715-capable wallet, redeem non-custodially against the existing SessionGrant.",
        "required": false,
        "params": {
          "standards": ["ERC-7715", "ERC-7710"],
          "grantMapping": "ERC-7715 wallet_requestExecutionPermissions -> SessionGrant.openSessionFor(owner, delegate, budgetCap, expiry, signature)",
          "contextEncoding": "abi.encode(address sessionGrant, bytes32 sessionId)",
          "redeemMapping": "ERC-7710 redeemDelegations -> SessionGrant.spend(sessionId, amount)",
          "revokeMapping": "SessionGrant.revoke(sessionId)",
          "supportedPermissionTypes": [
            "native-token-stream",
            "native-token-periodic",
            "erc20-token-stream",
            "erc20-token-periodic"
          ],
          "scope": "off-chain interop seam; on-chain ERC-7710 redeemDelegations router facade + Coinbase SpendPermissions bridge deferred to post-event",
          "adapter": "web/lib/erc7715/permissions.ts"
        }
      },
      {
        "uri": "https://eips.ethereum.org/EIPS/eip-8004",
        "description": "ERC-8004 (Trustless Agents) identity hook — the neutral public Ethereum agent identity/reputation/validation registry (co-authored by EF/Google/Coinbase/MetaMask, ENS-backed). Access0x1 publishes its agent identity here as a COMPLEMENT for discovery, not a moat; the enforcing spend authority remains the on-chain SessionGrant. The registry address and the minted agentId are env/booth-confirmed at deploy — NOT invented here.",
        "required": false,
        "params": {
          "registry": "BOOTH-CONFIRM",
          "registryNote": "ERC-8004 ships public, community-deployed singleton Identity/Reputation/Validation registries on mainnet + major EVM chains (live since 2026-01-29). The exact registry address for the target chain (and the Access0x1 agentId minted under it) is confirmed at the booth/deploy and read from env (e.g. ERC8004_IDENTITY_REGISTRY) — never a hardcoded address.",
          "agentId": "BOOTH-CONFIRM",
          "registries": ["identity", "reputation", "validation"],
          "role": "complement-not-moat"
        }
      }
    ]
  },
  "defaultInputModes": ["application/json"],
  "defaultOutputModes": ["application/json"],
  "securitySchemes": {
    "sessionGrantMandate": {
      "type": "mutualTLS",
      "description": "Out-of-band: the agent's authority is an on-chain SessionGrant (ERC-7702/6492) — a budget-capped, time-bounded, owner-revocable mandate. A counterparty verifies the agent acted in-bounds by reading SessionGrant.remaining(sessionId) on Arc, or by validating the AP2 mandate chain from /api/ap2/mandate."
    },
    "bearerJWT": {
      "type": "http",
      "scheme": "bearer",
      "bearerFormat": "JWT",
      "description": "Standard A2A bearer-token auth for agent-to-agent calls. BOOTH-CONFIRM the issuer/JWKS at deploy."
    }
  },
  "security": [{ "sessionGrantMandate": [] }],
  "skills": [
    {
      "id": "pay-x402-endpoint",
      "name": "Pay an x402 endpoint",
      "description": "Settles a single x402 / EIP-3009 micro-payment for a priced endpoint, within the agent's budget mandate. Enforced by the on-chain SessionGrant ceiling and the in-process daily meter (CEI: check budget, then pay; refund on unresolved 402).",
      "tags": ["payments", "x402", "stablecoin", "usdc", "arc"],
      "inputModes": ["application/json"],
      "outputModes": ["application/json"],
      "examples": [
        "{ \"url\": \"https://merchant.example/api/premium/quote\", \"pricePerCallUsd\": 0.001 }"
      ]
    },
    {
      "id": "nano-loop",
      "name": "Bounded pay-per-call loop",
      "description": "Fires a bounded series of x402 micro-payments (capped per request) for autonomous consumption of a metered API, never exceeding the SessionGrant budget.",
      "tags": ["payments", "x402", "agentic", "metered"],
      "inputModes": ["application/json"],
      "outputModes": ["application/json"],
      "examples": [
        "{ \"url\": \"https://merchant.example/api/premium/quote\", \"count\": 10, \"pricePerCallUsd\": 0.001 }"
      ]
    },
    {
      "id": "derive-ap2-mandate",
      "name": "Derive AP2 mandate chain",
      "description": "Expresses the agent's on-chain SessionGrant authorization as an AP2 Intent Mandate (W3C Verifiable Credential), and builds the hash-chained Cart and Payment mandates, so an AP2-aware counterparty can verify the agent acted within a user-authorized, bounded, revocable mandate. Pure derivation — moves no money.",
      "tags": ["ap2", "verifiable-credential", "mandate", "verification", "interop"],
      "inputModes": ["application/json"],
      "outputModes": ["application/json"],
      "examples": [
        "{ \"grant\": { \"sessionId\": \"0x...\", \"owner\": \"0x...\", \"delegate\": \"0x...\", \"budgetCap\": \"100000000\", \"token\": \"0x3600000000000000000000000000000000000000\", \"expiry\": 4000000000, \"nonce\": 0, \"chainId\": 5042002 } }"
      ]
    },
    {
      "id": "map-erc7715-permission",
      "name": "Map an ERC-7715 spend permission",
      "description": "Maps an ERC-7715 wallet_requestExecutionPermissions grant onto SessionGrant.openSessionFor params, returns the opaque 7715 `context` (= abi.encode(address sessionGrant, bytes32 sessionId)), and builds the ERC-7710 redeemDelegations descriptor that points at SessionGrant.spend. Pure off-chain derivation — moves no money; the on-chain 7710 router facade is deferred post-event. Lets a 7715-capable wallet grant once and a 7710-aware delegate redeem non-custodially against the existing SessionGrant.",
      "tags": ["erc7715", "erc7710", "spend-permissions", "delegation", "interop"],
      "inputModes": ["application/json"],
      "outputModes": ["application/json"],
      "examples": [
        "{ \"chainId\": 5042002, \"account\": \"0x...\", \"signer\": \"0x...\", \"expiry\": 4000000000, \"nonce\": 0, \"permission\": { \"type\": \"erc20-token-periodic\", \"data\": { \"token\": \"0x3600000000000000000000000000000000000000\", \"amount\": \"100000000\" } } }"
      ]
    }
  ],
  "supportsAuthenticatedExtendedCard": false,
  "signatures": [],
  "x-access0x1": {
    "note": "UNSIGNED card. This static card omits its RFC-7515 (JWS) signature because the domain signing key is env-keyed and confirmed at deploy/booth — NEVER committed. At deploy, a build step reads AGENT_CARD_SIGNING_JWK (a private JWS key for access0x1.xyz) and populates `signatures` with a detached JWS over the canonicalized card (per A2A v1.0 Signed Agent Card / RFC 7515), so a counterparty can verify the card was issued by the domain owner. Until then, the card is an unsigned, verifiable-by-reading-the-chain interop descriptor — the agent's real authority is the on-chain SessionGrant, not this JSON.",
    "verificationTruth": "on-chain",
    "onChainMandate": "Access0x1.SessionGrant (ERC-7702 / ERC-6492 / ERC-1271)",
    "humanProof": "World ID (verified-human gate)"
  },
  "x-erc7715": {
    "note": "Access0x1 speaks ERC-7715 / ERC-7710 in the interop/SDK layer on top of the EXISTING SessionGrant contract — no contract change. A 7715 grant maps onto SessionGrant.openSessionFor; the opaque 7715 `context` = abi.encode(address sessionGrant, bytes32 sessionId); an ERC-7710 redeemDelegations redemption maps onto SessionGrant.spend; revocation maps onto SessionGrant.revoke. SessionGrant already validates ECDSA / ERC-1271 / ERC-6492, so any 7715-capable wallet (incl. counterfactual) can authorize a session today.",
    "scope": "OFF-CHAIN interop seam only. The on-chain ERC-7710 redeemDelegations router facade and the Coinbase SpendPermissions bridge are DEFERRED to post-event (they touch the money path and need audit). This makes us SPEAK 7715/7710; it does NOT change the on-chain money path.",
    "adapter": "web/lib/erc7715/permissions.ts"
  },
  "x-erc8004": {
    "note": "ERC-8004 (Trustless Agents) identity is published as a COMPLEMENT for discoverability, not as a moat — the enforcing spend authority stays the on-chain SessionGrant. ERC-8004 is a NEUTRAL public Ethereum registry (Identity/Reputation/Validation), co-authored by EF/Google/Coinbase/MetaMask and ENS-backed; it is NOT a Google-operated contract.",
    "registry": "BOOTH-CONFIRM",
    "agentId": "BOOTH-CONFIRM",
    "registryNote": "No registry address is invented here. The public community-deployed ERC-8004 registry singleton for the target chain (and the Access0x1 agentId minted under it) are confirmed at the booth/deploy and read from env (e.g. ERC8004_IDENTITY_REGISTRY) — never hardcoded."
  }
}
