{"openapi":"3.1.0","info":{"title":"Stormap Agent API","version":"1.0.0","description":"Stormap tools for AI builders. Use search_guides/get_guide for practical, current guides on AI agents (OpenClaw, Hermes, Claude, coding agents, MCP, RAG). Use ai_visibility_score for a one-shot grade and fix list, and check_ai_crawler_access, generate_llms_txt and generate_ai_robots_txt to audit and improve how a website appears to AI crawlers and assistants. Free without a key (limited per day); add an API key from https://stormap.ai/developers for higher limits."},"servers":[{"url":"https://stormap.ai"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional API key (smk_...) from https://stormap.ai/developers"}}},"security":[{},{"bearer":[]}],"paths":{"/api/v1/tools/search_guides":{"post":{"operationId":"search_guides","summary":"Search Stormap guides","description":"Search Stormap's practical guides on building with AI agents (OpenClaw, Hermes, Claude, coding agents, browser automation, RAG, MCP, AI news). Returns titles, URLs, Markdown URLs and short descriptions. Use get_guide to read one.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"What to look for, e.g. \"install hermes desktop\" or \"stop coding agents overwriting files\"."},"category":{"type":"string","description":"Optional category filter, e.g. \"OpenClaw Tutorials\", \"AI News\", \"AI Tools\", \"Automation\"."},"limit":{"type":"integer","minimum":1,"maximum":20,"default":5}},"required":["query"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Bad input"},"401":{"description":"Invalid API key"},"429":{"description":"Limit reached"}}}},"/api/v1/tools/get_guide":{"post":{"operationId":"get_guide","summary":"Read a Stormap guide","description":"Return one Stormap guide as clean Markdown with front matter (title, URL, dates, tags). Accepts a slug (\"how-to-install-hermes-desktop\") or a stormap.ai post URL.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string","description":"Guide slug or full https://stormap.ai/post/... URL."},"max_chars":{"type":"integer","minimum":1000,"maximum":200000,"default":60000}},"required":["slug"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Bad input"},"401":{"description":"Invalid API key"},"429":{"description":"Limit reached"}}}},"/api/v1/tools/ai_visibility_score":{"post":{"operationId":"ai_visibility_score","summary":"AI visibility score","description":"Score how well AI assistants (ChatGPT, Claude, Perplexity, Gemini) can find, read and cite a public web page: 0-100 score, letter grade, pass/fail checks (AI answer-bot access in robots.txt, server-rendered content, title/meta, JSON-LD, canonical, llms.txt, sitemap) and a prioritized fix list. Blocking bulk training crawlers is treated as a policy choice and does not lower the score.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public page URL or domain, e.g. \"example.com\" or \"https://example.com/pricing\"."}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Bad input"},"401":{"description":"Invalid API key"},"429":{"description":"Limit reached"}}}},"/api/v1/tools/check_ai_crawler_access":{"post":{"operationId":"check_ai_crawler_access","summary":"Check AI crawler access","description":"Check whether AI crawlers (GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, Claude-User, PerplexityBot, Google-Extended, CCBot) may access a public URL according to its robots.txt, and score the page's machine readability (status, title, meta description, canonical, JSON-LD, server-rendered text). Returns a 0-100 score and a list of findings.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public page URL or domain, e.g. \"https://example.com/pricing\"."}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Bad input"},"401":{"description":"Invalid API key"},"429":{"description":"Limit reached"}}}},"/api/v1/tools/generate_llms_txt":{"post":{"operationId":"generate_llms_txt","summary":"Generate llms.txt","description":"Generate an llms.txt file (llmstxt.org format) for a public website. Uses the site name, summary and pages you pass; anything missing is filled from the homepage and sitemap.xml. Returns the file text plus notes on how to improve it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"site_url":{"type":"string","description":"Site root, e.g. \"https://example.com\"."},"site_name":{"type":"string"},"summary":{"type":"string","description":"One paragraph: what the site is, who it is for, what is most useful."},"pages":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Optional list of the most important page URLs. If omitted, sitemap.xml is used."},"max_pages":{"type":"integer","minimum":5,"maximum":60,"default":25}},"required":["site_url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Bad input"},"401":{"description":"Invalid API key"},"429":{"description":"Limit reached"}}}},"/api/v1/tools/generate_ai_robots_txt":{"post":{"operationId":"generate_ai_robots_txt","summary":"Generate robots.txt rules for AI crawlers","description":"Generate robots.txt rules for AI crawlers from a policy: \"open\" (allow all), \"balanced\" (allow search and user-triggered fetchers, block bulk training crawlers) or \"block\" (block all). Optional per-bot overrides, allowed/blocked paths, sitemap and crawl delay. No network access.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"policy":{"type":"string","enum":["open","balanced","block"],"default":"balanced"},"overrides":{"type":"object","additionalProperties":{"type":"string","enum":["allow","block"]},"description":"e.g. {\"GPTBot\":\"allow\",\"CCBot\":\"block\"}"},"allow_paths":{"type":"array","items":{"type":"string"}},"disallow_paths":{"type":"array","items":{"type":"string"}},"sitemap_url":{"type":"string"},"crawl_delay":{"type":"integer","minimum":1,"maximum":60},"site_url":{"type":"string"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Tool result (JSON)"},"400":{"description":"Bad input"},"401":{"description":"Invalid API key"},"429":{"description":"Limit reached"}}}}}}