{"openapi":"3.1.0","info":{"title":"PromptFrenzy Public API","version":"1.0.0","description":"Public read + write endpoints for the PromptFrenzy AI Tools Directory and prompt library. Designed for AI agents, LLM retrieval pipelines, and third-party indexers.","contact":{"name":"PromptFrenzy","url":"https://www.promptfrenzy.com/contact"},"license":{"name":"MIT (data) / proprietary (UI)","url":"https://www.promptfrenzy.com/terms"}},"servers":[{"url":"https://www.promptfrenzy.com"}],"tags":[{"name":"directory","description":"AI tools directory — badge-required listings"},{"name":"discovery","description":"Machine-discoverable indexes for crawlers + agents"}],"paths":{"/.well-known/ai-tools.json":{"get":{"tags":["directory","discovery"],"summary":"List all active directory tools","description":"Returns the complete machine-readable feed of every active tool in the PromptFrenzy AI Tools Directory. Updated hourly. No authentication. Suitable for crawlers, agents, and live-retrieval pipelines.","operationId":"listDirectoryTools","responses":{"200":{"description":"Tool feed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolFeed"}}}}}}},"/.well-known/ai-tools.schema.json":{"get":{"tags":["discovery"],"summary":"JSON Schema for the tool feed","description":"Returns the JSON Schema describing the shape of /.well-known/ai-tools.json.","operationId":"getToolFeedSchema","responses":{"200":{"description":"JSON Schema document","content":{"application/json":{}}}}}},"/llms.txt":{"get":{"tags":["discovery"],"summary":"LLM-friendly markdown sitemap","description":"Markdown index aimed at LLM training crawlers and retrieval pipelines. Lists top entry points, prompts, tutorials, the AI directory, and pointers to machine-readable feeds.","operationId":"getLlmsIndex","responses":{"200":{"description":"Markdown document","content":{"text/plain":{}}}}}},"/state-of-ai-tools":{"get":{"tags":["directory","discovery"],"summary":"Daily snapshot dataset for the AI Tools Directory","description":"HTML page with Dataset + ClaimReview JSON-LD describing the current state of the directory (totals, category/pricing breakdown, week-over-week deltas). Updated daily. Designed as a primary-source citation surface for LLM retrieval pipelines covering 'state of the AI tool ecosystem' queries.","operationId":"getStateOfAiToolsPage","responses":{"200":{"description":"HTML page","content":{"text/html":{}}}}}},"/llm-directory-recommendations":{"get":{"tags":["discovery"],"summary":"Quarterly LLM eval scoreboard","description":"HTML scoreboard showing which AI directories the major LLMs recommend. Includes Dataset JSON-LD pointing at the downloadable raw dataset at /.well-known/llm-eval-latest.json.","operationId":"getLlmDirectoryRecommendationsPage","responses":{"200":{"description":"HTML page","content":{"text/html":{}}}}}},"/.well-known/llm-eval-latest.json":{"get":{"tags":["discovery"],"summary":"Latest LLM directory-recommendation eval — raw dataset","description":"Machine-readable JSON of the latest finished quarterly LLM eval run. Includes the run metadata + every probe response with scoring (mention, position, cited URL, competitors). Suitable for citation in research or comparative analysis.","operationId":"getLlmEvalLatest","responses":{"200":{"description":"Eval dataset","content":{"application/json":{}}}}}},"/sitemap.xml":{"get":{"tags":["discovery"],"summary":"Standard XML sitemap","description":"Complete list of public URLs for traditional search-engine crawlers.","operationId":"getSitemap","responses":{"200":{"description":"XML sitemap","content":{"application/xml":{}}}}}},"/api/directory/submit":{"post":{"tags":["directory"],"summary":"Submit a tool to the directory","description":"Submit an AI tool for inclusion in the directory. The submitter's site must already have a badge pasted on a URL it controls (see /directory/about). On valid badge, the server opens an auto-merging GitHub PR. No authentication required.","operationId":"submitDirectoryTool","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolSubmission"}}}},"responses":{"200":{"description":"Submission accepted, PR opened","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitResponse"}}}},"400":{"description":"Validation failed or badge not detected at badge_url","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Slug already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/directory":{"get":{"tags":["directory"],"summary":"Human-facing directory index (HTML)","description":"HTML listing of all directory tools with category + pricing filters. Includes ItemList JSON-LD for structured-data consumers.","operationId":"getDirectoryPage","parameters":[{"name":"category","in":"query","schema":{"type":"string","enum":["image-generation","video-generation","text-generation","audio-generation","prompt-tools","agents","chatbots","code-assist","productivity","data-analysis","voice-cloning","other"]}},{"name":"pricing","in":"query","schema":{"type":"string","enum":["free","freemium","paid","subscription"]}},{"name":"q","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"HTML page","content":{"text/html":{}}}}}},"/directory/{slug}":{"get":{"tags":["directory"],"summary":"Tool detail page (HTML)","description":"HTML detail page for a single tool. Includes SoftwareApplication JSON-LD with structured fields for name, URL, category, pricing, and verification status.","operationId":"getDirectoryToolPage","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,48}[a-z0-9])?$"}}],"responses":{"200":{"description":"HTML page","content":{"text/html":{}}},"404":{"description":"Tool not found"}}}}},"components":{"schemas":{"ToolFeed":{"type":"object","required":["version","generatedAt","total","tools"],"properties":{"version":{"type":"string","const":"1.0"},"@context":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"total":{"type":"integer","minimum":0},"tools":{"type":"array","items":{"$ref":"#/components/schemas/Tool"}}}},"Tool":{"type":"object","required":["name","url","slug","description","category","pricing","status","permalink"],"properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"},"slug":{"type":"string"},"description":{"type":"string"},"category":{"type":"string","enum":["image-generation","video-generation","text-generation","audio-generation","prompt-tools","agents","chatbots","code-assist","productivity","data-analysis","voice-cloning","other"]},"tags":{"type":"array","items":{"type":"string"}},"pricing":{"type":"string","enum":["free","freemium","paid","subscription"]},"status":{"type":"string","enum":["verified","seed","pending","failed"]},"verifiedAt":{"type":["string","null"],"format":"date-time"},"permalink":{"type":"string","format":"uri"}}},"ToolSubmission":{"type":"object","required":["name","url","description","category","pricing","badge_url"],"properties":{"name":{"type":"string","minLength":2,"maxLength":80},"url":{"type":"string","format":"uri","description":"HTTPS only"},"description":{"type":"string","minLength":20,"maxLength":200},"category":{"type":"string","enum":["image-generation","video-generation","text-generation","audio-generation","prompt-tools","agents","chatbots","code-assist","productivity","data-analysis","voice-cloning","other"]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":30},"maxItems":5},"pricing":{"type":"string","enum":["free","freemium","paid","subscription"]},"logo":{"type":"string","format":"uri"},"badge_url":{"type":"string","format":"uri","description":"URL on a domain you control where the PromptFrenzy badge is pasted as static, dofollow HTML. Server fetches this and confirms the badge is present."},"slug":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{0,48}[a-z0-9])?$","description":"Optional. Derived from URL hostname if omitted."},"submitted_by":{"type":"string","pattern":"^[a-zA-Z0-9-]+$","maxLength":80,"description":"Optional. GitHub username or contact handle."}}},"SubmitResponse":{"type":"object","required":["ok","slug","pr_url"],"properties":{"ok":{"type":"boolean","const":true},"slug":{"type":"string"},"pr_url":{"type":"string","format":"uri"},"verification":{"type":"object","properties":{"status":{"type":"string","enum":["verified","pending","failed"]},"checked_at":{"type":"string","format":"date-time"}}}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"details":{}}}}}}