Overview

Base URL, conventions, response envelope, caching, CORS and the full endpoint list for the Founder.best public API.

Base URL
https://www.founder.best/api/v1

The REST API covers the same ground as the MCP server for callers that are not MCP clients: scripts, CI jobs, backends, custom GPT actions and anything that already speaks HTTP. Every endpoint is GET, returns JSON, needs no authentication and is cached at the edge for five minutes.

An OpenAPI 3.1 document is generated from the same enums the handlers validate against, so it cannot drift from the implementation. Import it into Postman, Stainless, a custom GPT, or any client generator. A small discovery document at the base URL links to everything else.

Endpoints

MethodPathReturns
GET/productsSearch / filter products, paginated
GET/products/{slug}One product, full record
GET/foundersSearch founders, paginated
GET/founders/{username}One founder with products
GET/launchesRanked launches for an ISO week
GET/trendingMost upvoted recent launches
GET/categoriesTaxonomy with live counts
GET/openapi.jsonOpenAPI 3.1 description
GET/Discovery document

Conventions

  • Versioning. The version is in the path (/api/v1) and in every body as api_version. Additive changes (new fields) ship without a version bump; anything that removes or renames a field will get /api/v2.
  • Identifiers. Products are addressed by slug, founders by username. Internal database IDs are never exposed.
  • URLs. Every object carries absolute URLs: url (the Founder.best page), api_url (its JSON) and markdown_url. Products also carry website, the product’s own site.
  • Dates. launch_date is YYYY-MM-DD; timestamps are ISO 8601 UTC.
  • Nulls. Optional values are null, never omitted, so shapes are stable across products.
  • Pagination. limit (1-100) and page (1-based). List responses include a pagination object with total, has_more and absolute next / previous URLs.
  • Arrays in query strings. Comma-separate (pricing=free,freemium) or repeat the key.

Response envelope

Every successful response starts with the same three fields:

json
{
  "api_version": "1",
  "generated_at": "2026-09-22T12:00:00.000Z",
  "docs": "https://www.founder.best/docs",
  …
}

Errors use one envelope too - see Errors:

json
{
  "error": { "code": "not_found", "message": "No live product with slug \"acme\". Use /api/v1/products?search= to find products." },
  "api_version": "1"
}

Caching, CORS and limits

HeaderValueMeaning
Cache-Controlpublic, s-maxage=300, stale-while-revalidate=3600Edge-cached for 5 minutes; categories for 10; llms files for 60.
Access-Control-Allow-Origin*Callable from browsers and hosted agents.
X-RateLimit-Limit120Requests allowed per minute per IP.
X-RateLimit-RemainingnRequests left in the current window.
X-RateLimit-Resetunix secondsWhen the window resets.
Retry-AftersecondsOnly on 429.

Legacy paths

The original /api/ai/latest, /api/ai/featured, /api/ai/winners, /api/ai/products/{slug} and /api/ai/founders/{username} feeds now answer with a 308 Permanent Redirect to their /api/v1 equivalent. HTTP clients follow it automatically; update bookmarks when convenient.