{"openapi":"3.0.3","info":{"title":"CrimsonBot public API","version":"v1","description":"JSON for the site on this hostname. Read routes return published use cases, tools, gear and news. Drafts are omitted. No key is needed for read access while the API is in beta. Vote totals are omitted from read responses while counts are hidden on the site. CrimsonBot does not ship an MCP server yet. GET /api/v1/playbooks and GET /api/v1/playbooks/{slug} are aliases of the use-cases routes."},"servers":[{"url":"https://crimsonbot.com"}],"paths":{"/api/v1/use-cases":{"get":{"summary":"List published use cases","parameters":[{"name":"category","in":"query","schema":{"type":"string"}},{"name":"agent","in":"query","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["beginner","intermediate","advanced"]}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["new","votes"]},"description":"Default is newest. sort=votes does not change order while vote counts are hidden."},{"name":"limit","in":"query","schema":{"type":"integer","maximum":100},"description":"Default 48. Capped at 100."}],"responses":{"200":{"description":"data array of published use case summaries. url and markdown point at /use-cases.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/use-cases/{slug}":{"get":{"summary":"One published use case","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"data object with steps, prompts, human checkpoints, tools, evidence, sources and updated_at. markdown points at /use-cases/{slug}.md.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Use case not found.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/use-cases/{slug}.md":{"get":{"summary":"The same use case as Markdown","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"text/markdown","content":{"text/markdown":{"schema":{"type":"string"}}}},"404":{"description":"Use case not found."}}}},"/api/v1/playbooks":{"get":{"summary":"Alias of GET /api/v1/use-cases. Same JSON, status 200, not a redirect.","parameters":[{"name":"category","in":"query","schema":{"type":"string"}},{"name":"agent","in":"query","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["beginner","intermediate","advanced"]}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["new","votes"]},"description":"Default is newest. sort=votes does not change order while vote counts are hidden."},{"name":"limit","in":"query","schema":{"type":"integer","maximum":100},"description":"Default 48. Capped at 100."}],"responses":{"200":{"description":"Same data array as GET /api/v1/use-cases. url and markdown point at /use-cases.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/playbooks/{slug}":{"get":{"summary":"Alias of GET /api/v1/use-cases/{slug}. Same JSON, status 200, not a redirect.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Same data object as GET /api/v1/use-cases/{slug}.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Use case not found.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/playbooks/{slug}.md":{"get":{"summary":"Alias of GET /use-cases/{slug}.md. Same Markdown, status 200, not a redirect.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"text/markdown","content":{"text/markdown":{"schema":{"type":"string"}}}},"404":{"description":"Use case not found."}}}},"/api/v1/tools":{"get":{"summary":"List published tools","parameters":[{"name":"category","in":"query","schema":{"type":"string"}},{"name":"pricing","in":"query","schema":{"type":"string","enum":["free","freemium","paid"]}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["new","az","votes"]},"description":"Default is newest. sort=votes does not change order while vote counts are hidden."},{"name":"limit","in":"query","schema":{"type":"integer","maximum":100},"description":"Default 60. Capped at 100."}],"responses":{"200":{"description":"data array of tools.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/tools/{slug}":{"get":{"summary":"One published tool","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"data object with vendor url, pricing, MCP support and notes. A comparison may omit url, pricing, and mcp. audience is present only when set. A comparison also includes kind and comparison (columns, rows of cell text, and a source URL per row).","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Tool not found.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/tools/{slug}.md":{"get":{"summary":"The same tool as Markdown. A comparison includes the table.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"text/markdown","content":{"text/markdown":{"schema":{"type":"string"}}}},"404":{"description":"Tool not found."}}}},"/api/v1/gear":{"get":{"summary":"List published gear","parameters":[{"name":"category","in":"query","schema":{"type":"string"}},{"name":"price","in":"query","schema":{"type":"string","enum":["under-100","100-500","500-2000","2000-plus"]}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["new","price","votes"]},"description":"Default is newest. sort=votes does not change order while vote counts are hidden."},{"name":"limit","in":"query","schema":{"type":"integer","maximum":100},"description":"Default 60. Capped at 100."}],"responses":{"200":{"description":"data array of gear. Amazon-linked prices are null.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/gear/{slug}":{"get":{"summary":"One published gear item","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"data object with specs, buy links through /go/g/, and related use cases.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Gear not found.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/gear/{slug}.md":{"get":{"summary":"The same gear item as Markdown","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"text/markdown","content":{"text/markdown":{"schema":{"type":"string"}}}},"404":{"description":"Gear not found."}}}},"/api/v1/news":{"get":{"summary":"Latest published news","parameters":[{"name":"topic","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","maximum":100},"description":"Default 50. Capped at 100."}],"responses":{"200":{"description":"data array of news items.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/votes":{"post":{"summary":"Toggle an upvote","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["type","id"],"properties":{"type":{"type":"string","enum":["playbook","tool","gear"]},"id":{"type":"integer"}}}}}},"responses":{"200":{"description":"voted boolean. votes is included only while counts are shown.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Expected { type, id }.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown site or unpublished item.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/subscribe":{"post":{"summary":"Adds an address to the newsletter waitlist. No email is sent.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"}}}}}},"responses":{"200":{"description":"{ ok: true }","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid email.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/submissions":{"post":{"summary":"Queue a tool, use case or news submission. Nothing is published until an editor approves it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["kind","title"],"properties":{"kind":{"type":"string","enum":["tool","playbook","news"]},"title":{"type":"string"},"url":{"type":"string"},"details":{"type":"string"},"email":{"type":"string"}}}}}},"responses":{"201":{"description":"{ ok: true }","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Missing or invalid fields.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/llms.txt":{"get":{"summary":"Site overview for LLMs","responses":{"200":{"description":"text/plain. Also served at /.well-known/llms.txt."}}}},"/.well-known/llms.txt":{"get":{"summary":"Same document as /llms.txt","responses":{"200":{"description":"text/plain"}}}},"/openapi.json":{"get":{"summary":"This document","responses":{"200":{"description":"application/json"}}}},"/feed.xml":{"get":{"summary":"RSS of published use cases, tools and gear. Drafts are not included.","responses":{"200":{"description":"application/rss+xml"}}}}}}