{"enabled":true,"protocol":"AP2","version":"0.1","spec":"https://google-agentic-commerce.github.io/AP2/specification/","role":"Merchant Endpoint (ME)","dev_mode":false,"endpoints":{"agent_card":"/api/ap2/agent-card","intent":"/api/ap2/intent","purchase":"/api/ap2/purchase","info":"/api/ap2/info"},"supported_payment_methods":["USDC_X402","USDC_X402"],"supported_order_types":["add_balance"],"merchant_authorization":{"type":"JWT","algorithm":"RS256","jwks_uri":"https://botmarket.oec.world/api/ap2/jwks","note":"merchant_authorization on CartMandate is a JWT with cart_hash claim."},"user_authorization":{"type":"Verifiable Presentation (sd-jwt-vc)","dev_mode":"Strict validation"},"tokenization":{"required":true,"note":"PaymentResponse.details must use tokenized references. Raw card numbers are rejected."},"modalities":{"HUMAN_PRESENT":"Fully supported (spec V0.1)","HUMAN_NOT_PRESENT":"Experimental (spec V1.x). Spend limit: $50.00"},"flow":["1. GET /api/ap2/agent-card — discover merchant capabilities","2. GET /api/catalog — browse datasets","3. POST /api/ap2/intent — submit IntentMandate, receive JWT-signed CartMandate","4. Present CartMandate to user for approval","5. POST /api/ap2/purchase — CartMandate + PaymentMandate → PaymentReceipt"],"botmarket_extensions":{"note":"BotMarket adds dataset_slug, order_type, amount_usd, buyer_email (required) to IntentMandate and download_url, api_key fields to PaymentReceipt. buyer_email used for order lookup, no login/session.","ask_buyer_email":"Before submitting intent, ensure you have a buyer_email to include in the IntentMandate. If the user already provided an email during the conversation, use that. Otherwise, ask the human which email they want to use for this purchase.","top_up_existing_key":"To add balance to an existing API key, pass api_key in IntentMandate (preferred) or send Authorization: Bearer <key> on the /purchase request. If neither is provided a new key is created. An invalid key is rejected with 400 before any payment is recorded."}}