{"openapi":"3.1.0","info":{"title":"FWFW Public API","version":"1.0.0","summary":"Public read APIs for FWFW (Find Websites From World), a human-curated global website directory.","description":"FWFW catalogs websites and web tools by continent, country, and topic.\n\nAll endpoints are public, require no authentication, and return JSON.\nErrors use a stable shape: `{ \"error\": { \"code\", \"message\", \"hint?\" } }`.\n\nMachine-readable site overview: https://fwfw.app/llms.txt\nHuman-facing DR checker docs: https://fwfw.app/tools/domain-rating-checker","contact":{"name":"FWFW","url":"https://fwfw.app","email":"openminimax@gmail.com"}},"servers":[{"url":"https://fwfw.app","description":"Production"}],"tags":[{"name":"tools","description":"Free SEO utility endpoints"}],"paths":{"/api/tools/domain-rating":{"get":{"operationId":"checkDomainRating","summary":"Check a domain's Ahrefs Domain Rating (DR)","description":"Returns the Ahrefs Domain Rating (0-100) for a domain. Free to use, no authentication. Wraps the Ahrefs free Domain Rating API; may be rate-limited upstream.","tags":["tools"],"parameters":[{"name":"url","in":"query","required":true,"description":"Domain or full URL to check, e.g. 'example.com' or 'https://example.com'. 'www.' prefix is stripped automatically.","schema":{"type":"string","minLength":1},"example":"fwfw.app"}],"responses":{"200":{"description":"Domain Rating fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRatingResult"},"example":{"success":true,"domain":"fwfw.app","domainRating":42}}}},"400":{"description":"Structured error. Body is always JSON: { error: { code, message, hint? } }.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Structured error. Body is always JSON: { error: { code, message, hint? } }.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error. Body is always JSON: { error: { code, message, hint? } }.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"checkDomainRatingPost","summary":"Check a domain's Ahrefs Domain Rating (JSON body)","description":"Same as the GET variant but accepts the target in a JSON request body, for agents that prefer POST.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRatingRequest"},"example":{"url":"fwfw.app"}}}},"responses":{"200":{"description":"Domain Rating fetched successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRatingResult"}}}},"400":{"description":"Structured error. Body is always JSON: { error: { code, message, hint? } }.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Structured error. Body is always JSON: { error: { code, message, hint? } }.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Structured error. Body is always JSON: { error: { code, message, hint? } }.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code","enum":["BAD_REQUEST","NOT_FOUND","METHOD_NOT_ALLOWED","UPSTREAM_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string","description":"Human-readable error message"},"hint":{"type":"string","description":"Optional resolution hint for agents (how to fix the request)"}}}}},"DomainRatingRequest":{"type":"object","required":["url"],"properties":{"url":{"type":"string","minLength":1,"description":"Domain or full URL to check ('www.' is stripped automatically)","examples":["fwfw.app","https://fwfw.app"]}}},"DomainRatingResult":{"type":"object","required":["success","domain","domainRating"],"properties":{"success":{"type":"boolean","description":"Always true on a 200 response"},"domain":{"type":"string","description":"Normalized domain that was checked","example":"fwfw.app"},"domainRating":{"type":"integer","minimum":0,"maximum":100,"description":"Ahrefs Domain Rating score","example":42}}}}}}