{
  "openapi": "3.1.0",
  "info": {
    "title": "DodoLaunch public API",
    "version": "1.0.0",
    "description": "Read-only access to live launches, categories, weekly leaderboards and the Launch OS directory database. No key required for reads. CORS enabled. Errors use RFC 9457 problem+json.",
    "contact": {
      "email": "hello@dodolaunch.com",
      "url": "https://dodolaunch.com/developers"
    }
  },
  "servers": [
    {
      "url": "https://dodolaunch.com"
    }
  ],
  "externalDocs": {
    "url": "https://dodolaunch.com/developers"
  },
  "paths": {
    "/api/v1/products": {
      "get": {
        "operationId": "listProducts",
        "summary": "List live products",
        "description": "Live products with structured pricing, platforms, votes and ratings. Sorted by score by default.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Search name, tagline or domain.",
            "schema": {
              "type": "string"
            },
            "example": "agent"
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Category slug.",
            "schema": {
              "type": "string"
            },
            "example": "ai-agents"
          },
          {
            "name": "pricing",
            "in": "query",
            "required": false,
            "description": "Pricing model.",
            "schema": {
              "type": "string",
              "enum": [
                "FREE",
                "FREEMIUM",
                "PAID",
                "FREE_TRIAL",
                "OPEN_SOURCE"
              ]
            }
          },
          {
            "name": "platform",
            "in": "query",
            "required": false,
            "description": "Platform key.",
            "schema": {
              "type": "string",
              "enum": [
                "web",
                "mac",
                "windows",
                "linux",
                "ios",
                "android",
                "chrome",
                "api",
                "slack"
              ]
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "ISO-2 country of the team.",
            "schema": {
              "type": "string"
            },
            "example": "IN"
          },
          {
            "name": "free",
            "in": "query",
            "required": false,
            "description": "Only products with a free plan.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Sort order.",
            "schema": {
              "type": "string",
              "enum": [
                "score",
                "newest",
                "rating",
                "votes"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, 1-based.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000
            },
            "example": "1"
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Items per page (max 100).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": "20"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/products/{slug}": {
      "get": {
        "operationId": "getProduct",
        "summary": "Get one product",
        "description": "Full structured record: description, features, integrations, pricing plans, FAQ, company facts and links.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Product slug.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Product"
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/launches": {
      "get": {
        "operationId": "listLaunches",
        "summary": "Weekly leaderboard",
        "description": "Organic ranking for an ISO week plus the separate, paid Featured lane. Defaults to the current week.",
        "parameters": [
          {
            "name": "week",
            "in": "query",
            "required": false,
            "description": "ISO week key, e.g. 2026-W43.",
            "schema": {
              "type": "string"
            },
            "example": "2026-W43"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Leaderboard"
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/categories": {
      "get": {
        "operationId": "listCategories",
        "summary": "List categories",
        "description": "Every category with its live product count and best-of page URL.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CategoryList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/directories": {
      "get": {
        "operationId": "listDirectories",
        "summary": "List launch directories",
        "description": "The Launch OS directory database: domain rating, link type, price, free route and approval time.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Search name, URL or description.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "Directory kind.",
            "schema": {
              "type": "string",
              "enum": [
                "LAUNCH",
                "DIRECTORY",
                "AI_DIRECTORY",
                "REVIEW",
                "COMMUNITY",
                "NEWSLETTER"
              ]
            }
          },
          {
            "name": "niche",
            "in": "query",
            "required": false,
            "description": "Niche.",
            "schema": {
              "type": "string",
              "enum": [
                "saas",
                "ai",
                "dev",
                "mac",
                "mobile",
                "design",
                "marketing",
                "general"
              ]
            }
          },
          {
            "name": "link_type",
            "in": "query",
            "required": false,
            "description": "Link type.",
            "schema": {
              "type": "string",
              "enum": [
                "DOFOLLOW",
                "NOFOLLOW",
                "MIXED",
                "NONE"
              ]
            }
          },
          {
            "name": "free",
            "in": "query",
            "required": false,
            "description": "Only directories you can get into for free.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "min_dr",
            "in": "query",
            "required": false,
            "description": "Minimum domain rating.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100
            },
            "example": "50"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Sort order.",
            "schema": {
              "type": "string",
              "enum": [
                "dr",
                "visits",
                "price",
                "approval"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Page number, 1-based.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000
            },
            "example": "1"
          },
          {
            "name": "per_page",
            "in": "query",
            "required": false,
            "description": "Items per page (max 100).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": "20"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DirectoryList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/mcp": {
      "post": {
        "operationId": "mcp",
        "summary": "Model Context Protocol (Streamable HTTP)",
        "description": "JSON-RPC 2.0 endpoint. Methods: initialize, tools/list, tools/call (search_products, get_product, get_leaderboard, list_directories).",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ProductSummary": {
        "type": "object",
        "required": [
          "slug",
          "name",
          "tagline",
          "url",
          "website",
          "pricing",
          "platforms",
          "rating",
          "proof",
          "buyerScore"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "tagline": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "DodoLaunch product page."
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "domain": {
            "type": "string"
          },
          "category": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "slug": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  }
                }
              }
            ]
          },
          "pricing": {
            "type": "object",
            "properties": {
              "model": {
                "type": "string"
              },
              "fromUsdMonthly": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "freePlan": {
                "type": "boolean"
              }
            }
          },
          "platforms": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rating": {
            "type": "object",
            "properties": {
              "average": {
                "type": "number"
              },
              "count": {
                "type": "integer"
              }
            }
          },
          "proof": {
            "type": "object",
            "description": "Verified outcomes: bot-filtered visitors and pixel-tracked signups DodoLaunch sent.",
            "properties": {
              "votes": {
                "type": "integer"
              },
              "revenueVerified": {
                "type": "boolean"
              },
              "mrrBand": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "buyerScore": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "country": {
            "type": [
              "string",
              "null"
            ]
          },
          "launchedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "markdown": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Product": {
        "type": "object",
        "properties": {
          "data": {
            "allOf": [
              {
                "type": "object",
                "required": [
                  "slug",
                  "name",
                  "tagline",
                  "url",
                  "website",
                  "pricing",
                  "platforms",
                  "rating",
                  "proof",
                  "buyerScore"
                ],
                "properties": {
                  "slug": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "tagline": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "DodoLaunch product page."
                  },
                  "website": {
                    "type": "string",
                    "format": "uri"
                  },
                  "domain": {
                    "type": "string"
                  },
                  "category": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "slug": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          }
                        }
                      }
                    ]
                  },
                  "pricing": {
                    "type": "object",
                    "properties": {
                      "model": {
                        "type": "string"
                      },
                      "fromUsdMonthly": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "freePlan": {
                        "type": "boolean"
                      }
                    }
                  },
                  "platforms": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "rating": {
                    "type": "object",
                    "properties": {
                      "average": {
                        "type": "number"
                      },
                      "count": {
                        "type": "integer"
                      }
                    }
                  },
                  "proof": {
                    "type": "object",
                    "description": "Verified outcomes: bot-filtered visitors and pixel-tracked signups DodoLaunch sent.",
                    "properties": {
                      "votes": {
                        "type": "integer"
                      },
                      "revenueVerified": {
                        "type": "boolean"
                      },
                      "mrrBand": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    }
                  },
                  "buyerScore": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "country": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "launchedAt": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "markdown": {
                    "type": "string",
                    "format": "uri"
                  }
                }
              },
              {
                "type": "object",
                "properties": {
                  "description": {
                    "type": "string",
                    "description": "Markdown."
                  },
                  "categories": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "slug": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "primary": {
                          "type": "boolean"
                        }
                      }
                    }
                  },
                  "features": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "integrations": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "useCases": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "pricingPlans": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "price": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        },
                        "period": {
                          "type": "string"
                        },
                        "features": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "faq": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "q": {
                          "type": "string"
                        },
                        "a": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "company": {
                    "type": "object"
                  },
                  "links": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string",
                      "format": "uri"
                    }
                  }
                }
              }
            ]
          }
        }
      },
      "ProductList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductSummary"
            }
          },
          "meta": {
            "type": "object",
            "properties": {
              "page": {
                "type": "integer"
              },
              "perPage": {
                "type": "integer"
              },
              "total": {
                "type": "integer"
              },
              "totalPages": {
                "type": "integer"
              },
              "next": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "prev": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          }
        }
      },
      "Leaderboard": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "week": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "startsAt": {
                "type": "string",
                "format": "date-time"
              },
              "endsAt": {
                "type": "string",
                "format": "date-time"
              },
              "organic": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/LeaderboardRow"
                }
              },
              "featured": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/LeaderboardRow"
                }
              }
            }
          }
        }
      },
      "LeaderboardRow": {
        "type": "object",
        "properties": {
          "rank": {
            "type": [
              "integer",
              "null"
            ]
          },
          "lane": {
            "type": "string",
            "enum": [
              "ORGANIC",
              "FEATURED"
            ]
          },
          "status": {
            "type": "string"
          },
          "score": {
            "type": "number"
          },
          "votes": {
            "type": "integer"
          },
          "product": {
            "$ref": "#/components/schemas/ProductSummary"
          }
        }
      },
      "CategoryList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slug": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "blurb": {
                  "type": "string"
                },
                "products": {
                  "type": "integer"
                },
                "url": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "type": "object"
          }
        }
      },
      "DirectoryList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slug": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "submitUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "dr": {
                  "type": "integer"
                },
                "monthlyVisits": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "linkType": {
                  "type": "string",
                  "enum": [
                    "DOFOLLOW",
                    "NOFOLLOW",
                    "MIXED",
                    "NONE"
                  ]
                },
                "pricing": {
                  "type": "string"
                },
                "priceUsd": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "freeRoute": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "kind": {
                  "type": "string"
                },
                "niches": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "approvalDays": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "requiresBadge": {
                  "type": "boolean"
                },
                "page": {
                  "type": "string"
                }
              }
            }
          },
          "meta": {
            "type": "object",
            "properties": {
              "page": {
                "type": "integer"
              },
              "perPage": {
                "type": "integer"
              },
              "total": {
                "type": "integer"
              },
              "totalPages": {
                "type": "integer"
              },
              "next": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "prev": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          }
        }
      },
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details.",
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          }
        },
        "required": [
          "title",
          "status"
        ]
      }
    }
  }
}