{
  "protocolVersion": "0.3.0",
  "name": "eTROC Shopping Agent",
  "description": "Finds live second-hand listings on eTROC near a place from a plain-language request (any language): furniture, electronics, vehicles, property and more. Replies with a short answer plus structured listings with prices, distance and links.",
  "url": "https://etroc.app/a2a",
  "preferredTransport": "JSONRPC",
  "additionalInterfaces": [
    {
      "url": "https://etroc.app/a2a",
      "transport": "JSONRPC"
    }
  ],
  "supportedInterfaces": [
    {
      "url": "https://etroc.app/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "provider": {
    "organization": "eTROC",
    "url": "https://etroc.app"
  },
  "version": "1.0.0",
  "documentationUrl": "https://etroc.app/llms.txt",
  "iconUrl": "https://etroc.app/icons/icon-512.png",
  "additionalCapabilities": {
    "agenticCommerce": "https://etroc.app/.well-known/agentic-commerce.json",
    "mcp": "https://etroc.app/mcp",
    "x402": "https://etroc.app/api/v1",
    "mpp": "https://etroc.app/api/v1",
    "visaTap": [
      "agent-browser-auth",
      "agent-payer-auth"
    ],
    "mastercardAgentPay": [
      "Agent-pay-auth"
    ]
  },
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false,
    "extendedAgentCard": false,
    "extensions": [
      {
        "uri": "https://github.com/google-agentic-commerce/ap2/tree/v0.1",
        "description": "AP2 v0.1 merchant: send an ap2.mandates.IntentMandate data part to receive a CartMandate signed by eTROC, then an ap2.mandates.PaymentMandate to place the order (signed receipt in the reply). Spec: https://ap2-protocol.org/",
        "required": true,
        "params": {
          "roles": [
            "merchant"
          ]
        }
      },
      {
        "uri": "https://ucp.dev/2026-08-25/specification/shopping/checkout/a2a",
        "description": "UCP 2026-08-25 checkout over A2A: data parts keyed \"checkout\" (create / update / complete / cancel), same contract as https://etroc.app/.well-known/ucp.",
        "required": false
      }
    ]
  },
  "securitySchemes": {
    "oauth2": {
      "type": "oauth2",
      "description": "OAuth 2.1 (PKCE). Checkout completion needs scope commerce:write; see https://etroc.app/auth.md.",
      "flows": {
        "authorizationCode": {
          "authorizationUrl": "https://etroc.app/oauth/authorize",
          "tokenUrl": "https://etroc.app/api/oauth/token",
          "scopes": {
            "listings:read": "Search and read live eTROC listings and places.",
            "account:read": "Read the member's saved listings and notifications.",
            "account:write": "Save listings and import marketplace links for the member.",
            "commerce:write": "Open checkouts for the member: send offers on listings and order eTROC plans or credits."
          }
        }
      }
    }
  },
  "security": [
    {
      "oauth2": [
        "listings:read"
      ]
    }
  ],
  "defaultInputModes": [
    "text/plain",
    "application/json"
  ],
  "defaultOutputModes": [
    "text/plain",
    "application/json"
  ],
  "skills": [
    {
      "id": "checkout",
      "name": "Buy a listing or an eTROC plan",
      "description": "Opens a checkout for one item (`listing:<uuid>` or `product:<sku>`) and completes it for the signed-in member: member listings send the seller an offer and are paid in person at pickup; eTROC plans return bank-transfer / cash-deposit instructions. Supports AP2 mandates and UCP checkout data parts.",
      "tags": [
        "checkout",
        "commerce",
        "ap2",
        "ucp",
        "buy"
      ],
      "examples": [
        "Buy listing:3f1c2a4e-0000-4000-8000-000000000000",
        "I want to buy this sofa and pick it up tomorrow",
        "Subscribe me to the eTROC Seller plan"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "text/plain",
        "application/json"
      ]
    },
    {
      "id": "find-listings",
      "name": "Find second-hand listings",
      "description": "Understands what the person wants (item, budget, condition, swap) and where, then returns matching live listings. Send the place as text in the message, or as a data part `{\"place\": \"Casablanca\"}` / `{\"lat\": 33.57, \"lon\": -7.59, \"radiusKm\": 25}`.",
      "tags": [
        "marketplace",
        "second-hand",
        "shopping",
        "search",
        "local",
        "electronics",
        "phones & tablets",
        "computers",
        "gaming",
        "cameras & audio",
        "appliances",
        "furniture",
        "lighting",
        "decor",
        "art & collectibles",
        "art",
        "clothing",
        "shoes & accessories",
        "bags & luggage",
        "jewelry & watches",
        "beauty & health",
        "baby & kids",
        "toys & games",
        "sports & outdoors",
        "sports",
        "bicycles",
        "tools & diy",
        "garden",
        "books & media",
        "books",
        "musical instruments",
        "pets",
        "office",
        "food & pantry",
        "vehicles",
        "property",
        "other"
      ],
      "examples": [
        "Find a used sofa under 3000 MAD in Casablanca",
        "Cherche un iPhone 13 d'occasion à Rabat",
        "Bikes open to swap near Marrakech",
        "Apartments for rent in Tangier"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "text/plain",
        "application/json"
      ]
    }
  ]
}