{"openapi":"3.1.0","info":{"title":"makers.page API","version":"1.0.0","description":"Discover AI tools & indie products. List yours free for a page, backlink, and sitemap. Draft launch content with Marketing MCP. This API is read-only and public: every operation below can be called with no API key, no OAuth token, and no signup. Errors are always structured JSON, never an HTML page.","contact":{"name":"makers.page","email":"alex@makers.page","url":"https://makers.page"},"license":{"name":"Public read access - see terms","url":"https://makers.page/terms"}},"servers":[{"url":"https://makers.page/api/v1","description":"Production"}],"security":[],"tags":[{"name":"Products","description":"The makers.page product directory."},{"name":"Resources","description":"Curated tool lists for indie founders."}],"paths":{"/products":{"get":{"operationId":"listProducts","summary":"List approved products","description":"Returns every approved product listed on makers.page, newest first. Supports filtering by category and free-text search.","tags":["Products"],"security":[],"parameters":[{"name":"category","in":"query","required":false,"description":"Exact category tag to filter by (e.g. \"AI\").","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Free-text search across product name and description.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max results to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"A page of products.","content":{"application/json":{"schema":{"type":"object","required":["products","count","total"],"properties":{"products":{"type":"array","items":{"type":"object","required":["slug","name","founder","websiteUrl","description","categories","url"],"properties":{"slug":{"type":"string","description":"Unique product identifier, used in URLs."},"name":{"type":"string","description":"Product name."},"founder":{"type":"string","description":"Founder or maker display name."},"websiteUrl":{"type":"string","format":"uri","description":"The product's own website."},"description":{"type":"string","description":"One-line description of the product."},"categories":{"type":"array","items":{"type":"string"},"description":"Category tags (e.g. \"AI\", \"Developer Tools\")."},"twitterHandle":{"type":["string","null"],"description":"X/Twitter handle without the @, or null if unset."},"url":{"type":"string","format":"uri","description":"Public product page on makers.page."}}}},"count":{"type":"integer","description":"Number of products in this response."},"total":{"type":"integer","description":"Total matching products before limit."}}}}}}}}},"/products/{slug}":{"get":{"operationId":"getProductBySlug","summary":"Get a single product","description":"Returns one approved product by its slug (the last path segment of its product page URL).","tags":["Products"],"security":[],"parameters":[{"name":"slug","in":"path","required":true,"description":"Product slug, e.g. the \"foo\" in makers.page/products/foo.","schema":{"type":"string"}}],"responses":{"200":{"description":"The matching product.","content":{"application/json":{"schema":{"type":"object","required":["product"],"properties":{"product":{"type":"object","required":["slug","name","founder","websiteUrl","description","categories","url"],"properties":{"slug":{"type":"string","description":"Unique product identifier, used in URLs."},"name":{"type":"string","description":"Product name."},"founder":{"type":"string","description":"Founder or maker display name."},"websiteUrl":{"type":"string","format":"uri","description":"The product's own website."},"description":{"type":"string","description":"One-line description of the product."},"categories":{"type":"array","items":{"type":"string"},"description":"Category tags (e.g. \"AI\", \"Developer Tools\")."},"twitterHandle":{"type":["string","null"],"description":"X/Twitter handle without the @, or null if unset."},"url":{"type":"string","format":"uri","description":"Public product page on makers.page."}}}}}}}},"404":{"description":"No resource matches the given identifier.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","hint"],"properties":{"code":{"type":"string","enum":["not_found","bad_request","unauthorized","rate_limited","internal_error"],"description":"Machine-readable error code an agent can branch on."},"message":{"type":"string","description":"Human-readable explanation."},"hint":{"type":"string","description":"What to try next to recover."}}}}}}}}}}},"/resources":{"get":{"operationId":"listResourceCategories","summary":"List resource categories","description":"Returns every curated resource category (payments, hosting, email, etc.) with item counts.","tags":["Resources"],"security":[],"parameters":[],"responses":{"200":{"description":"All resource categories.","content":{"application/json":{"schema":{"type":"object","required":["categories","count"],"properties":{"categories":{"type":"array","items":{"type":"object","required":["slug","label","description","itemCount","url"],"properties":{"slug":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"itemCount":{"type":"integer"},"url":{"type":"string","format":"uri"}}}},"count":{"type":"integer"}}}}}}}}},"/resources/{category}":{"get":{"operationId":"listResourceItemsByCategory","summary":"List tools in a resource category","description":"Returns every curated tool in a single resource category by its slug.","tags":["Resources"],"security":[],"parameters":[{"name":"category","in":"path","required":true,"description":"Category slug, from GET /resources.","schema":{"type":"string"}}],"responses":{"200":{"description":"The category and its tools.","content":{"application/json":{"schema":{"type":"object","required":["category","items","count"],"properties":{"category":{"type":"object","required":["slug","label","description","itemCount","url"],"properties":{"slug":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"itemCount":{"type":"integer"},"url":{"type":"string","format":"uri"}}},"items":{"type":"array","items":{"type":"object","required":["name","slug","description","url","tags","featured"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"tags":{"type":"array","items":{"type":"string"}},"featured":{"type":"boolean"}}}},"count":{"type":"integer"}}}}}},"404":{"description":"No resource matches the given identifier.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","hint"],"properties":{"code":{"type":"string","enum":["not_found","bad_request","unauthorized","rate_limited","internal_error"],"description":"Machine-readable error code an agent can branch on."},"message":{"type":"string","description":"Human-readable explanation."},"hint":{"type":"string","description":"What to try next to recover."}}}}}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","hint"],"properties":{"code":{"type":"string","enum":["not_found","bad_request","unauthorized","rate_limited","internal_error"],"description":"Machine-readable error code an agent can branch on."},"message":{"type":"string","description":"Human-readable explanation."},"hint":{"type":"string","description":"What to try next to recover."}}}}},"Product":{"type":"object","required":["slug","name","founder","websiteUrl","description","categories","url"],"properties":{"slug":{"type":"string","description":"Unique product identifier, used in URLs."},"name":{"type":"string","description":"Product name."},"founder":{"type":"string","description":"Founder or maker display name."},"websiteUrl":{"type":"string","format":"uri","description":"The product's own website."},"description":{"type":"string","description":"One-line description of the product."},"categories":{"type":"array","items":{"type":"string"},"description":"Category tags (e.g. \"AI\", \"Developer Tools\")."},"twitterHandle":{"type":["string","null"],"description":"X/Twitter handle without the @, or null if unset."},"url":{"type":"string","format":"uri","description":"Public product page on makers.page."}}},"ResourceCategory":{"type":"object","required":["slug","label","description","itemCount","url"],"properties":{"slug":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"itemCount":{"type":"integer"},"url":{"type":"string","format":"uri"}}},"ResourceItem":{"type":"object","required":["name","slug","description","url","tags","featured"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"tags":{"type":"array","items":{"type":"string"}},"featured":{"type":"boolean"}}}}}}