{
  "$schema": "https://x402.org/schemas/discovery-v2.json",
  "x402Version": 1,
  "status": "live",
  "lastUpdated": "2026-07-16T00:00:00Z",
  "provider": {
    "name": "VirtualSMS",
    "url": "https://virtualsms.io",
    "agentLanding": "https://virtualsms.io/agents",
    "skill": "https://virtualsms.io/agents/skill.md",
    "contact": "hello@virtualsms.io"
  },
  "resources": [
    {
      "resource": "https://virtualsms.io/api/v1/x402/sms-verify",
      "type": "http",
      "methods": ["POST"],
      "x402Version": 1,
      "description": "Pay-per-call SMS verification. Send a payment matching one of the accepted assets for the requested service + country, receive the OTP/verification code in the same response. No account or API key needed, settlement happens inline per call.",
      "accepts": [
        {
          "scheme": "exact",
          "network": "base",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "payTo": "0xfEc54264350d97d9b63f9Cc415BAF708C4695F32",
          "minAmount": "50000",
          "maxAmount": "5000000",
          "decimals": 6,
          "token": "USDC",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "humanMin": "$0.05",
            "humanDefault": "$0.10",
            "humanMax": "$5"
          }
        },
        {
          "scheme": "exact",
          "network": "solana",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "payTo": "7AJwx3J2qXnURXZmU5AotDeMUY5dDBqBFbweHLZ2UeUs",
          "minAmount": "50000",
          "maxAmount": "5000000",
          "decimals": 6,
          "token": "USDC",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDC",
            "humanMin": "$0.05",
            "humanDefault": "$0.10",
            "humanMax": "$5"
          }
        },
        {
          "scheme": "exact",
          "network": "solana",
          "asset": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
          "payTo": "7AJwx3J2qXnURXZmU5AotDeMUY5dDBqBFbweHLZ2UeUs",
          "minAmount": "50000",
          "maxAmount": "5000000",
          "decimals": 6,
          "token": "USDT",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "USDT",
            "humanMin": "$0.05",
            "humanDefault": "$0.10",
            "humanMax": "$5"
          }
        },
        {
          "scheme": "exact",
          "network": "bnb",
          "asset": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
          "payTo": "0xfEc54264350d97d9b63f9Cc415BAF708C4695F32",
          "minAmount": "50000000000000000",
          "maxAmount": "5000000000000000000",
          "decimals": 18,
          "token": "USDC",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "Binance-Peg USDC",
            "version": "1",
            "assetTransferMethod": "permit2",
            "permit2Address": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
            "proxyAddress": "0x402085c248EeA27D92E8b30b2C58ed07f9E20001",
            "humanMin": "$0.05",
            "humanDefault": "$0.10",
            "humanMax": "$5"
          }
        },
        {
          "scheme": "exact",
          "network": "bnb",
          "asset": "0x55d398326f99059fF775485246999027B3197955",
          "payTo": "0xfEc54264350d97d9b63f9Cc415BAF708C4695F32",
          "minAmount": "50000000000000000",
          "maxAmount": "5000000000000000000",
          "decimals": 18,
          "token": "USDT",
          "maxTimeoutSeconds": 300,
          "extra": {
            "name": "Binance-Peg USDT",
            "version": "1",
            "assetTransferMethod": "permit2",
            "permit2Address": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
            "proxyAddress": "0x402085c248EeA27D92E8b30b2C58ed07f9E20001",
            "humanMin": "$0.05",
            "humanDefault": "$0.10",
            "humanMax": "$5"
          }
        }
      ],
      "metadata": {
        "input": {
          "service": "string (required, e.g. \"telegram\", \"whatsapp\")",
          "country": "string (required, 2-letter country code)",
          "max_price_usdc": "number (optional, default 0.10, min > 0, max 5.00, server-side price ceiling)"
        },
        "output": {
          "phone_number": "string",
          "code": "string (the OTP/verification code received)",
          "sms_content": "string (full SMS body)",
          "service": "string (echoed from request)",
          "country": "string (echoed from request)",
          "x402_settlement": {
            "tx_hash": "string (onchain settlement reference)",
            "amount_paid_usdc": "number",
            "network": "string",
            "token": "string"
          }
        },
        "categories": ["sms", "verification", "otp", "phone", "agent-tools"],
        "tags": ["real-sim", "x402", "sms-verify", "pay-per-call", "145-countries", "2500-services"]
      }
    }
  ],
  "deprecated": [],
  "roadmap": {
    "additionalChains": [
      {"network": "eip155:137", "asset": "USDC + USDT", "blockedBy": "operator config (X402_DISABLED_NETWORKS), same Permit2 wire format as BNB, unlocks with env-var change"},
      {"network": "eip155:42161", "asset": "USDC + USDT", "blockedBy": "operator config (X402_DISABLED_NETWORKS), same Permit2 wire format as BNB, unlocks with env-var change"},
      {"network": "eip155:10", "asset": "USDC", "blockedBy": "operator config (X402_DISABLED_NETWORKS), same Permit2 wire format as BNB, unlocks with env-var change"}
    ],
    "plannedResources": [
      {
        "name": "topup",
        "status": "not_deployed",
        "description": "USDC/USDT deposit-first flow to receive a reusable API key for REST/MCP access. Implementation exists on an unmerged feature branch only, not part of this server's registered routes. Calling /api/v1/x402/topup returns 404."
      },
      {
        "name": "facilitator",
        "status": "not_deployed",
        "description": "Standalone self-hosted facilitator HTTP endpoint. Not implemented as a separate route, payment verification and settlement happen inline inside the sms-verify resource handler. Calling /api/v1/x402/facilitator returns 404."
      }
    ]
  },
  "notes": [
    "x402 sms-verify (pay-per-call SMS verification) is LIVE on Base USDC (EIP-3009), Solana USDC + USDT, and BNB Chain USDC + USDT (Permit2).",
    "Per-call price defaults to $0.10 and can be set via the optional max_price_usdc field (server ceiling $5.00); actual retail price depends on the requested country/service.",
    "BNB Chain settlement uses the canonical x402ExactPermit2Proxy at 0x402085c248EeA27D92E8b30b2C58ed07f9E20001 with the witness pattern, facilitator cannot redirect funds.",
    "Polygon / Arbitrum / Optimism share the BNB Permit2 wire format; they unlock with an X402_DISABLED_NETWORKS env-var change, no new implementation.",
    "Payment verification and settlement happen inline in the sms-verify resource handler, there is no separate facilitator endpoint to call.",
    "Self-hosted. No Coinbase CDP dependency.",
    "See roadmap.plannedResources for features that are implemented on a branch but not yet deployed to this server."
  ]
}
