{"openapi":"3.1.0","info":{"title":"Smol Launch Public API","description":"Read-only access to Smol Launch's product catalog and weekly launch rankings. No authentication required. Data mirrors what is public on smollaunch.com. Rate limit: 120 requests/minute per IP. Responses are cacheable for 1 hour.","version":"1.0.0","contact":{"email":"team@smollaunch.com"}},"servers":[{"url":"https://smollaunch.com"}],"security":[],"tags":[{"name":"Products","description":"Public launched product catalog."},{"name":"Launch periods","description":"Public weekly launch rankings."}],"paths":{"/api/products":{"get":{"operationId":"listProducts","summary":"List launched products","description":"Returns discoverable launched products in name order. Pagination defaults to 50 products and accepts at most 100 per page.","tags":["Products"],"parameters":[{"name":"page","in":"query","description":"Positive page number.","schema":{"type":"integer","minimum":1,"maximum":10000}},{"name":"per_page","in":"query","description":"Products per page.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Paginated product catalog","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductList"}}}},"429":{"description":"Rate limited. Wait for Retry-After seconds before retrying.","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/products/{slug}":{"get":{"operationId":"getProduct","summary":"Get a launched product","description":"Returns one publicly visible launched product with its description, pricing, votes, ratings, and first launch date.","tags":["Products"],"parameters":[{"name":"slug","in":"path","required":true,"description":"Product slug.","schema":{"type":"string"},"example":"product-name"}],"responses":{"200":{"description":"Product detail","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"type":"object","properties":{"product":{"$ref":"#/components/schemas/ProductDetail"}},"required":["product"],"example":{"product":{"name":"Focus Flow","slug":"focus-flow","tagline":"A calmer way to plan focused work.","categories":["Productivity"],"pricing_model":"freemium","url":"https://smollaunch.com/products/focus-flow","maker":"Focus Flow","description":"Focus Flow helps small teams organize uninterrupted work.","website_url":"https://focus-flow.example.com","votes":18,"reviews_count":3,"average_rating":4.7,"first_launched_on":"2026-06-02"}}}}}},"429":{"description":"Rate limited. Wait for Retry-After seconds before retrying.","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The product slug does not identify a publicly visible launched product.","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/launch_periods":{"get":{"operationId":"listLaunchPeriods","summary":"List recent launch periods","description":"Returns up to 26 active or finished weekly launch periods, newest first.","tags":["Launch periods"],"responses":{"200":{"description":"Recent launch periods, newest first","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchPeriodList"}}}},"429":{"description":"Rate limited. Wait for Retry-After seconds before retrying.","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/launch_periods/{slug}":{"get":{"operationId":"getLaunchPeriod","summary":"Get a launch period leaderboard","description":"Returns an active or finished launch period and up to 50 approved discoverable rankings.","tags":["Launch periods"],"parameters":[{"name":"slug","in":"path","required":true,"description":"Launch period slug.","schema":{"type":"string"},"example":"2026-week-23"}],"responses":{"200":{"description":"Period plus ranked submissions","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchPeriodDetail"}}}},"429":{"description":"Rate limited. Wait for Retry-After seconds before retrying.","headers":{"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The launch period slug does not exist.","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Product":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"tagline":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"pricing_model":{"type":"string"},"price_label":{"type":"string"},"url":{"type":"string","format":"uri"},"maker":{"type":"string"}},"required":["categories","url"],"example":{"name":"Focus Flow","slug":"focus-flow","tagline":"A calmer way to plan focused work.","categories":["Productivity"],"pricing_model":"freemium","url":"https://smollaunch.com/products/focus-flow","maker":"Focus Flow"}},"ProductDetail":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"tagline":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"pricing_model":{"type":"string"},"price_label":{"type":"string"},"url":{"type":"string","format":"uri"},"maker":{"type":"string"},"description":{"type":"string"},"website_url":{"type":"string","format":"uri"},"votes":{"type":"integer","minimum":0},"reviews_count":{"type":"integer","minimum":0},"average_rating":{"type":"number"},"first_launched_on":{"type":"string","format":"date"}},"required":["categories","url"],"example":{"name":"Focus Flow","slug":"focus-flow","tagline":"A calmer way to plan focused work.","categories":["Productivity"],"pricing_model":"freemium","url":"https://smollaunch.com/products/focus-flow","maker":"Focus Flow","description":"Focus Flow helps small teams organize uninterrupted work.","website_url":"https://focus-flow.example.com","votes":18,"reviews_count":3,"average_rating":4.7,"first_launched_on":"2026-06-02"}},"ProductList":{"type":"object","properties":{"products":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"page":{"type":"integer","minimum":1},"total_pages":{"type":"integer","minimum":0},"total_count":{"type":"integer","minimum":0}},"required":["products","page","total_pages","total_count"],"example":{"products":[{"name":"Focus Flow","slug":"focus-flow","tagline":"A calmer way to plan focused work.","categories":["Productivity"],"pricing_model":"freemium","url":"https://smollaunch.com/products/focus-flow","maker":"Focus Flow"}],"page":1,"total_pages":1,"total_count":1}},"LaunchPeriod":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["active","finished"]},"starts_on":{"type":"string","format":"date"},"ends_on":{"type":"string","format":"date"},"url":{"type":"string","format":"uri"}},"required":["slug","name","status","starts_on","ends_on","url"],"example":{"slug":"2026-week-23","name":"June 2–8, 2026","status":"finished","starts_on":"2026-06-02","ends_on":"2026-06-08","url":"https://smollaunch.com/launches/2026-week-23"}},"RankingEntry":{"type":"object","properties":{"position":{"type":"integer","minimum":1},"product":{"type":"string"},"name":{"type":"string"},"tagline":{"type":"string"},"score":{"type":"number"},"votes":{"type":"integer","minimum":0},"comments":{"type":"integer","minimum":0},"url":{"type":"string","format":"uri"}},"required":["position"],"example":{"position":1,"product":"focus-flow","name":"Focus Flow","tagline":"A calmer way to plan focused work.","score":22.0,"votes":18,"comments":4,"url":"https://smollaunch.com/products/focus-flow"}},"LaunchPeriodList":{"type":"object","properties":{"launch_periods":{"type":"array","items":{"$ref":"#/components/schemas/LaunchPeriod"}}},"required":["launch_periods"],"example":{"launch_periods":[{"slug":"2026-week-23","name":"June 2–8, 2026","status":"finished","starts_on":"2026-06-02","ends_on":"2026-06-08","url":"https://smollaunch.com/launches/2026-week-23"}]}},"LaunchPeriodDetail":{"type":"object","properties":{"launch_period":{"$ref":"#/components/schemas/LaunchPeriod"},"rankings":{"type":"array","items":{"$ref":"#/components/schemas/RankingEntry"}}},"required":["launch_period","rankings"],"example":{"launch_period":{"slug":"2026-week-23","name":"June 2–8, 2026","status":"finished","starts_on":"2026-06-02","ends_on":"2026-06-08","url":"https://smollaunch.com/launches/2026-week-23"},"rankings":[{"position":1,"product":"focus-flow","name":"Focus Flow","tagline":"A calmer way to plan focused work.","score":22.0,"votes":18,"comments":4,"url":"https://smollaunch.com/products/focus-flow"}]}},"Error":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"resolution":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["error","code","message","resolution"],"example":{"error":"Product not found","code":"product_not_found","message":"Product not found","resolution":"Check the slug or list products at /api/products."}}},"headers":{"RateLimitPolicy":{"description":"The applicable API rate-limit policy.","schema":{"type":"string","example":"\\\"api\\\";q=120;w=60"}},"RateLimit":{"description":"The current rate-limit state, sent only when a request is rejected.","schema":{"type":"string","example":"\\\"api\\\";r=0;t=60"}},"RetryAfter":{"description":"Seconds to wait before retrying a rejected request.","schema":{"type":"integer","minimum":1,"example":60}}}}}