{"openapi":"3.1.0","info":{"title":"VietMRR API","description":"Verified revenue of Vietnamese startups. Amounts are in VND. Send `Authorization: Bearer <key>`; 60 requests/minute per key.","license":{"name":""},"version":"1"},"paths":{"/v1/listings":{"get":{"tags":[],"summary":"Startups currently for sale.","operationId":"listings","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"segment","in":"query","description":"\"tech\" | \"offline\"","required":false,"schema":{"type":"string"}},{"name":"city","in":"query","description":"City slug, e.g. \"ha-noi\" (offline pages).","required":false,"schema":{"type":"string"}},{"name":"provider","in":"query","required":false,"schema":{"type":"string"}},{"name":"group","in":"query","description":"\"vn\" | \"global\" | \"app_store\"","required":false,"schema":{"type":"string"}},{"name":"for_sale","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"verified","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"min_vnd","in":"query","description":"Minimum headline revenue (MRR or 30-day), VND. Startups with hidden revenue never match.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"max_vnd","in":"query","description":"Maximum headline revenue, VND.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sort","in":"query","description":"\"revenue\" (default) | \"growth\" | \"total\" | \"newest\"","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"`{ data: StartupSummary[], total }`","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/startups":{"get":{"tags":[],"summary":"List startups (leaderboard order by default).","operationId":"startups","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string"}},{"name":"segment","in":"query","description":"\"tech\" | \"offline\"","required":false,"schema":{"type":"string"}},{"name":"city","in":"query","description":"City slug, e.g. \"ha-noi\" (offline pages).","required":false,"schema":{"type":"string"}},{"name":"provider","in":"query","required":false,"schema":{"type":"string"}},{"name":"group","in":"query","description":"\"vn\" | \"global\" | \"app_store\"","required":false,"schema":{"type":"string"}},{"name":"for_sale","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"verified","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"min_vnd","in":"query","description":"Minimum headline revenue (MRR or 30-day), VND. Startups with hidden revenue never match.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"max_vnd","in":"query","description":"Maximum headline revenue, VND.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sort","in":"query","description":"\"revenue\" (default) | \"growth\" | \"total\" | \"newest\"","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"`{ data: StartupSummary[], total }`","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or invalid API key"},"429":{"description":"Rate limited"}}}},"/v1/startups/{slug}":{"get":{"tags":[],"summary":"One startup with its revenue chart.","operationId":"startup","parameters":[{"name":"slug","in":"path","description":"Startup slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{ data: StartupDetail }`","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found"}}}}},"components":{"schemas":{"Amount":{"oneOf":[{"type":"object","required":["vnd","type"],"properties":{"type":{"type":"string","enum":["exact"]},"vnd":{"type":"integer","format":"int64"}}},{"type":"object","required":["min_vnd","type"],"properties":{"max_vnd":{"type":["integer","null"],"format":"int64"},"min_vnd":{"type":"integer","format":"int64"},"type":{"type":"string","enum":["range"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["hidden"]}}}],"description":"A revenue figure as shown publicly."},"ChartPoint":{"type":"object","required":["day","value"],"properties":{"day":{"type":"string","format":"date"},"value":{"type":"number","format":"double","description":"VND for exact visibility; 0..100 relative scale for range visibility."}}},"FounderMini":{"type":"object","required":["handle","display_name"],"properties":{"avatar_url":{"type":["string","null"]},"display_name":{"type":"string"},"facebook_url":{"type":["string","null"]},"handle":{"type":"string"},"linkedin_url":{"type":["string","null"]},"x_handle":{"type":["string","null"]}}},"SourceRevenue":{"type":"object","required":["provider","revenue_30d"],"properties":{"mrr":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Amount","description":"Subscription providers only."}]},"provider":{"type":"string"},"revenue_30d":{"$ref":"#/components/schemas/Amount"}}},"StartupDetail":{"allOf":[{"$ref":"#/components/schemas/StartupSummary"},{"type":"object","required":["tech_stack","marketing_channels","loc_estimated","visibility","chart_scale","chart","sources","app_store_verified","play_store_verified"],"properties":{"active_subscriptions":{"type":["integer","null"],"format":"int32"},"app_store_url":{"type":["string","null"]},"app_store_verified":{"type":"boolean","description":"The app's ID appears in this startup's own App Store / Google Play reports."},"chart":{"type":"array","items":{"$ref":"#/components/schemas/ChartPoint"}},"chart_scale":{"type":"string","description":"\"exact\" | \"relative\" | \"none\""},"description":{"type":["string","null"]},"description_en":{"type":["string","null"]},"founded_on":{"type":["string","null"],"format":"date"},"github_repo":{"type":["string","null"]},"lines_of_code":{"type":["integer","null"],"format":"int64"},"listing":{"type":["object","null"]},"loc_estimated":{"type":"boolean"},"marketing_channels":{"type":"array","items":{"type":"string"}},"play_store_url":{"type":["string","null"]},"play_store_verified":{"type":"boolean"},"revenue_per_loc_vnd":{"type":["number","null"],"format":"double"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceRevenue"},"description":"Revenue per source (provider), so readers can judge where the headline comes from."},"tech_stack":{"type":"array","items":{"type":"string"}},"visibility":{"type":"string"}}}]},"StartupSummary":{"type":"object","required":["slug","public_slug","name","headline_kind","headline","revenue_30d","total_revenue","verified","providers","for_sale","founders","anonymous_founders","website_verified","segment"],"properties":{"anonymous_founders":{"type":"integer","format":"int32","description":"Founders who chose to stay anonymous; they're left out of `founders`.","minimum":0},"asking_price_vnd":{"type":["integer","null"],"format":"int64"},"branches":{"type":["integer","null"],"format":"int32","description":"Offline businesses: number of branches/locations."},"category":{"type":["string","null"]},"city":{"type":["string","null"]},"city_slug":{"type":["string","null"],"description":"URL slug of the city, e.g. \"ho-chi-minh\"."},"district":{"type":["string","null"]},"for_sale":{"type":"boolean"},"founders":{"type":"array","items":{"$ref":"#/components/schemas/FounderMini"}},"headline":{"$ref":"#/components/schemas/Amount"},"headline_kind":{"type":"string","description":"\"mrr\" when a subscription provider supplies MRR; \"mrr_plus\" when MRR is added to\n30-day revenue from sources without subscriptions; otherwise \"revenue_30d\".","example":"mrr"},"logo_url":{"type":["string","null"]},"mom_growth_pct":{"type":["number","null"],"format":"double"},"mrr":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Amount"}]},"name":{"type":"string"},"providers":{"type":"array","items":{"type":"string"}},"public_slug":{"type":"string","description":"Public URL slug (an alias such as \"stealth-venture-31\" for stealth startups)."},"revenue_30d":{"$ref":"#/components/schemas/Amount"},"segment":{"type":"string","description":"\"tech\" | \"offline\".","example":"offline"},"slug":{"type":"string","description":"Slug for this viewer: the public slug, or the real slug in the owner's dashboard."},"stealth":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/StealthInfo","description":"Present when the startup is anonymous; name/logo/website/founders are withheld."}]},"tagline":{"type":["string","null"],"description":"Default (Vietnamese) copy."},"tagline_en":{"type":["string","null"],"description":"English copy, when the founder wrote one; show `tagline` otherwise."},"tier":{"type":["string","null"]},"total_revenue":{"$ref":"#/components/schemas/Amount"},"verified":{"type":"boolean"},"website":{"type":["string","null"]},"website_verified":{"type":"boolean","description":"The website's domain was proven to belong to this startup (DNS TXT or meta tag)."}}},"StealthInfo":{"type":"object","required":["key","number"],"properties":{"key":{"type":"string","description":"Alias key, e.g. \"stealth_venture\" (for localized labels)."},"number":{"type":"integer","format":"int32"}}}},"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}}},"security":[{"bearer":[]}]}