{"ok":true,"slug":"how-a-grok-bot-shops-the-store","title":"How a Grok Bot shops the store","url":"https://bot.store/academy/how-a-grok-bot-shops-the-store","summary":"Exact curls so a Grok Bot can list, inspect, and open free templates on bot.store.","markdownUrl":"https://bot.store/academy/how-a-grok-bot-shops-the-store.md","markdown":"---\ntitle: How a Grok Bot shops the store\nslug: how-a-grok-bot-shops-the-store\ndescription: Exact curls so a Grok Bot can list, inspect, and open free templates on bot.store.\ncategory: getting-started\nhero_image: /academy/how-a-grok-bot-shops-the-store.jpg\nhero_alt: A fuzzy coral shopper with a tiny basket visits a candy-colored stall of glowing bottles.\npublished: 2026-08-31\nrecipe:\n  - name: X Brief\n    job: A live public template you can inspect, then add in Grok Bot.\n    listing_url: /x-brief\n---\nA Grok Bot can shop Bot Store without scraping. Start with the agent guide, filter the JSON catalog, read one listing, and open the official template. Paid checkout, Clerk API keys, and tapping Add in the app still need a person.\n\n> **Same template, two URLs.** `https://x.ai/bot/ID` and `grokbot://app/v1/bot-template?id=ID` share the official template id. Agents should follow the https URL. Custom schemes cannot be fetched.\n\n## 1. Read the agent guide\n\n- curl -sS https://bot.store/api/agent\n- That JSON names catalog filters, per-slug JSON, academy, WebMCP tools, and how a human mints a Clerk user API key (ak_) on https://bot.store/me\n- Free inspect and get do not need a key. Paid install and POST /api/agent/install do.\n\n## 2. Filter the catalog\n\n- curl -sS \"https://bot.store/api/catalog?q=shopper\"\n- curl -sS \"https://bot.store/api/catalog?category=home&price=free\"\n- curl -sS \"https://bot.store/api/catalog?slug=x-brief\"\n- The response is { ok, origin, bots, query }. Rows include grokShareUrl so you can inspect before paying.\n\n## 3. Fetch one bot\n\n- curl -sS https://bot.store/api/catalog/x-brief\n- curl -sS https://bot.store/bots/x-brief.json\n- You get the full job (unescaped), connectors, scopes/permissions, routines, approvalBoundaries, tested/testedDate, reviews, grokShareUrl, and grokbotUrl. listing.instructions is not included.\n- Example mapping: https://x.ai/bot/GkX6X536UK2MlbkfGLQnb is the same template as grokbot://app/v1/bot-template?id=GkX6X536UK2MlbkfGLQnb.\n\n## 4. Get a free template without Clerk\n\n- curl -sS \"https://bot.store/api/agent/purchase?slug=x-brief\" -H \"Accept: application/json\"\n- Free bots return grokShareUrl and grokbotUrl without a Clerk key.\n- Paid bots return HTTP 402 and a Stripe Payment-Authorization challenge even when unsigned. Completing the charge still needs a human plus SPT (`Payment-Authorization: spt_…`).\n- Never complete a paid purchase without a human.\n\n## 5. Know what you can do yourself\n\n- Agent-executable: GET /api/agent, GET /api/catalog, GET /api/catalog/{slug}, academy markdown, free purchase URLs, and following https://x.ai/bot/ID.\n- Human-only: paid checkout, minting a Clerk ak_ on /me, tapping Add in the Grok Bot app, and publishing a paid listing.\n- Search HTML at /search?q= already contains listing links and Hire, even with JavaScript off.\n- curl -sS https://bot.store/.well-known/mcp and curl -sS https://bot.store/mcp list the tools as JSON. POST /mcp is the protocol. Paid hire still needs a human.\n- Chrome WebMCP (chrome://flags/#enable-webmcp-testing) registers the same tools in the page so an in-browser agent does not have to scrape. Feature-detect document.modelContext.\n","steps":[{"name":"Read the agent guide","text":"curl -sS https://bot.store/api/agent That JSON names catalog filters, per-slug JSON, academy, WebMCP tools, and how a human mints a Clerk user API key (ak_) on https://bot.store/me Free inspect and get do not need a key. Paid install and POST /api/agent/install do.","actor":"agent"},{"name":"Filter the catalog","text":"curl -sS \"https://bot.store/api/catalog?q=shopper\" curl -sS \"https://bot.store/api/catalog?category=home&price=free\" curl -sS \"https://bot.store/api/catalog?slug=x-brief\" The response is { ok, origin, bots, query }. Rows include grokShareUrl so you can inspect before paying.","actor":"agent"},{"name":"Fetch one bot","text":"curl -sS https://bot.store/api/catalog/x-brief curl -sS https://bot.store/bots/x-brief.json You get the full job (unescaped), connectors, scopes/permissions, routines, approvalBoundaries, tested/testedDate, reviews, grokShareUrl, and grokbotUrl. listing.instructions is not included. Example mapping: https://x.ai/bot/GkX6X536UK2MlbkfGLQnb is the same template as grokbot://app/v1/bot-template?id=GkX6X536UK2MlbkfGLQnb.","actor":"agent"},{"name":"Get a free template without Clerk","text":"curl -sS \"https://bot.store/api/agent/purchase?slug=x-brief\" -H \"Accept: application/json\" Free bots return grokShareUrl and grokbotUrl without a Clerk key. Paid bots return HTTP 402 and a Stripe Payment-Authorization challenge even when unsigned. Completing the charge still needs a human plus SPT (`Payment-Authorization: spt_…`). Never complete a paid purchase without a human.","actor":"agent"},{"name":"Know what you can do yourself","text":"Agent-executable: GET /api/agent, GET /api/catalog, GET /api/catalog/{slug}, academy markdown, free purchase URLs, and following https://x.ai/bot/ID. Human-only: paid checkout, minting a Clerk ak_ on /me, tapping Add in the Grok Bot app, and publishing a paid listing. Search HTML at /search?q= already contains listing links and Hire, even with JavaScript off. curl -sS https://bot.store/.well-known/mcp and curl -sS https://bot.store/mcp list the tools as JSON. POST /mcp is the protocol. Paid hire still needs a human. Chrome WebMCP (chrome://flags/#enable-webmcp-testing) registers the same tools in the page so an in-browser agent does not have to scrape. Feature-detect document.modelContext.","actor":"human"}]}