{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://listedstartups.com/api/schema","title":"Listed Startups Listing","description":"Schema for company, product, accelerator, program, and investor listings in Listed Startups","type":"object","required":["name","slug","tagline","description","categories","added_via"],"additionalProperties":false,"allOf":[{"if":{"properties":{"listing_type":{"const":"company"}}},"then":{"if":{"required":["is_stealth"],"properties":{"is_stealth":{"const":true}}},"else":{"required":["url"],"properties":{"url":{"type":"string"}}}}},{"if":{"required":["listing_type"],"properties":{"listing_type":{"const":"product"}}},"then":{"required":["url"],"properties":{"url":{"type":"string"},"is_stealth":{"const":false},"stage":{"type":"null"}}}},{"if":{"required":["listing_type"],"properties":{"listing_type":{"enum":["accelerator","program","investor"]}}},"then":{"required":["url"],"properties":{"url":{"type":"string"},"is_stealth":{"const":false},"stage":{"type":"null"},"pricing":{"type":"null"}}}},{"if":{"properties":{"listing_type":{"const":"company"}}},"then":{"properties":{"type_data":{"$ref":"#/$defs/companyDetails"}}}},{"if":{"required":["listing_type"],"properties":{"listing_type":{"const":"product"}}},"then":{"properties":{"type_data":{"$ref":"#/$defs/productDetails"}}}},{"if":{"required":["listing_type"],"properties":{"listing_type":{"const":"accelerator"}}},"then":{"properties":{"type_data":{"$ref":"#/$defs/acceleratorDetails"}}}},{"if":{"required":["listing_type"],"properties":{"listing_type":{"const":"program"}}},"then":{"properties":{"type_data":{"$ref":"#/$defs/programDetails"}}}},{"if":{"required":["listing_type"],"properties":{"listing_type":{"const":"investor"}}},"then":{"properties":{"type_data":{"$ref":"#/$defs/investorDetails"}}}},{"if":{"required":["parent_slug"],"properties":{"parent_slug":{"type":"string"}}},"then":{"required":["listing_type"],"properties":{"listing_type":{"enum":["product","program"]}}}}],"properties":{"listing_type":{"type":"string","enum":["company","product","accelerator","program","investor"],"default":"company","description":"Discriminator for the strict type_data block. Omitted legacy YAML defaults to company; the legacy value `startup` is accepted as an alias for company."},"name":{"type":"string","minLength":1,"maxLength":120},"slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","minLength":2,"maxLength":80},"tagline":{"type":"string","minLength":1,"maxLength":160},"description":{"type":"string","minLength":1,"maxLength":4000},"url":{"type":["string","null"],"format":"uri","maxLength":2048},"is_stealth":{"type":"boolean","default":false},"normalized_domain":{"type":["string","null"],"maxLength":253,"readOnly":true,"description":"Canonical hostname derived by the service; never trust a submitted value."},"normalized_url_key":{"type":["string","null"],"maxLength":2048,"readOnly":true,"description":"Server-derived identity key: hostname for organizations (company, accelerator, investor) and normalized host-plus-path URL for products and programs."},"parent_slug":{"type":["string","null"],"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","minLength":2,"maxLength":80,"description":"Containing listing: a product's company, or a program's accelerator or investor."},"type_data":{"type":"object","default":{},"description":"Strict metadata selected by listing_type."},"logo":{"type":["string","null"],"format":"uri","description":"Public URL of the logo image (PNG, JPEG, or WebP, up to 5 MB). Easiest way to give a logo: on web, REST, and MCP writes the server fetches this URL and stores a copy as media.logo_asset_id. If the copy fails the URL is kept and loaded directly, and the response carries a `warnings` entry. Ignored when media.logo_asset_id is set."},"links":{"type":"array","maxItems":24,"uniqueItems":true,"description":"Official social profiles and other public links. For social profiles set platform to a lowercase identifier such as x, linkedin, facebook, instagram, youtube, tiktok, github, bluesky, threads, mastodon, or discord. twitter, insta, fb, bsky, and yt are accepted aliases and normalized on REST/MCP/web writes.","items":{"$ref":"#/$defs/profileLink"}},"entry_points":{"type":"array","maxItems":40,"description":"Where to get in, tagged by audience: sign up, docs, API, MCP server, hosted agent, pricing, support, and so on. See $defs/entryPoint.","items":{"$ref":"#/$defs/entryPoint"}},"founders":{"type":"array","maxItems":30,"description":"People attached to this listing. Each entry materializes a first-class person profile. Public web, REST, and MCP writes may supply an existing person_slug to map the same person across listings; omit it to create a listing-scoped profile.","items":{"$ref":"#/$defs/founder"}},"media":{"type":["object","null"],"additionalProperties":false,"description":"Managed images stored by Listed Startups. Asset ids come from POST /api/media/import (URL or base64, one call), POST /api/media/request + PUT (raw bytes), or the MCP import_media / request_media_upload tools. For a logo you can instead set the top-level `logo` URL and let the server copy it.","properties":{"logo_asset_id":{"$ref":"#/$defs/nullableAssetId","description":"Managed logo asset. Takes precedence over the `logo` URL."},"cover_asset_id":{"$ref":"#/$defs/nullableAssetId"},"screenshot_asset_ids":{"type":"array","maxItems":12,"uniqueItems":true,"items":{"$ref":"#/$defs/assetId"}}}},"categories":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"minItems":1,"maxItems":8,"uniqueItems":true},"stage":{"type":["string","null"],"enum":["idea","pre-seed","seed","series-a","series-b+","growth","public","bootstrapped",null],"description":"Company-only. A startup is a company at an early stage."},"founded_year":{"type":["integer","null"],"minimum":1900,"maximum":2100},"location":{"type":["string","null"],"maxLength":120},"pricing":{"type":["string","null"],"maxLength":200,"description":"Company and product listings only."},"twitter":{"type":["string","null"],"format":"uri","maxLength":2048,"description":"Legacy X/Twitter URL. New clients should add {label, url, platform: 'x'} to links instead."},"github":{"type":["string","null"],"format":"uri","maxLength":2048,"description":"Legacy GitHub URL. New clients should add {label, url, platform: 'github'} to links instead."},"linkedin":{"type":["string","null"],"format":"uri","maxLength":2048,"description":"Legacy LinkedIn URL. New clients should add {label, url, platform: 'linkedin'} to links instead."},"contact_email":{"type":["string","null"],"format":"email"},"added_at":{"type":["string","null"],"format":"date-time"},"added_via":{"type":"string","enum":["pr","mcp","web"]},"geo":{"type":["object","null"],"additionalProperties":false,"properties":{"keywords":{"type":"array","items":{"type":"string","minLength":1,"maxLength":120},"maxItems":20},"target_queries":{"type":"array","items":{"type":"string","minLength":1,"maxLength":300},"maxItems":20},"one_liner_for_search":{"type":["string","null"],"maxLength":280},"canonical_facts":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500},"maxItems":20},"differentiators":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500},"maxItems":20},"llms_txt_url":{"type":["string","null"],"format":"uri"},"geo_description":{"type":["string","null"],"maxLength":2000}}},"agents":{"type":["object","null"],"additionalProperties":false,"properties":{"summary":{"type":["string","null"],"maxLength":1000},"can_do":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500},"maxItems":30},"cannot_do":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500},"maxItems":30},"mcp_url":{"type":["string","null"],"format":"uri"},"api_url":{"type":["string","null"],"format":"uri"},"docs_url":{"type":["string","null"],"format":"uri"},"skills":{"type":"array","items":{"type":"string","minLength":1,"maxLength":120},"maxItems":30},"example_prompts":{"type":"array","items":{"type":"string","minLength":1,"maxLength":1000},"maxItems":20},"auth":{"type":["string","null"],"maxLength":500},"homepage_for_agents":{"type":["string","null"],"format":"uri"}}},"featured_until":{"type":["string","null"],"format":"date-time"},"example":{"type":"boolean","default":false},"ownership_status":{"type":"string","enum":["unclaimed","pending","verified","disputed"],"default":"unclaimed","readOnly":true},"claimed_by_agent_id":{"type":["string","null"],"maxLength":200,"readOnly":true},"claimed_via_claim_id":{"type":["string","null"],"maxLength":200,"readOnly":true},"claimed_at":{"type":["string","null"],"format":"date-time","readOnly":true},"updated_at":{"type":["string","null"],"format":"date-time","readOnly":true}},"$defs":{"companyDetails":{"type":"object","additionalProperties":false,"maxProperties":0},"productDetails":{"type":"object","additionalProperties":false,"properties":{"product_kind":{"type":["string","null"],"enum":["saas","app","api","developer_tool","open_source","hardware","marketplace","service","other",null]},"pricing_model":{"type":["string","null"],"enum":["free","freemium","paid","usage_based","enterprise","open_source","subscription","per_seat","per_token","credits","hourly","retainer","project","other",null]},"platforms":{"type":"array","maxItems":12,"items":{"type":"string","minLength":1,"maxLength":40}},"free_tier":{"type":["boolean","null"]},"open_source":{"type":["boolean","null"]},"launched_year":{"type":["integer","null"],"minimum":1970,"maximum":2100},"pricing_url":{"type":["string","null"],"format":"uri","maxLength":2048},"docs_url":{"type":["string","null"],"format":"uri","maxLength":2048},"changelog_url":{"type":["string","null"],"format":"uri","maxLength":2048},"status_url":{"type":["string","null"],"format":"uri","maxLength":2048},"use_cases":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":160}},"integrations":{"type":"array","maxItems":40,"items":{"type":"string","minLength":1,"maxLength":80}},"alternatives":{"type":"array","maxItems":20,"uniqueItems":true,"description":"Slugs of comparable product listings.","items":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","minLength":2,"maxLength":80}}}},"applicationStatus":{"type":["string","null"],"enum":["open","rolling","upcoming","closed","unknown",null]},"acceleratorDetails":{"type":"object","additionalProperties":false,"properties":{"application_url":{"type":["string","null"],"format":"uri","maxLength":2048},"application_status":{"$ref":"#/$defs/applicationStatus"},"formats":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":80}},"focus_areas":{"type":"array","maxItems":30,"items":{"type":"string","minLength":1,"maxLength":120}},"funding_offer":{"type":["string","null"],"minLength":1,"maxLength":500},"equity_terms":{"type":["string","null"],"minLength":1,"maxLength":500},"cohort_frequency":{"type":["string","null"],"minLength":1,"maxLength":160},"portfolio_url":{"type":["string","null"],"format":"uri","maxLength":2048}}},"programDetails":{"type":"object","additionalProperties":false,"properties":{"program_kind":{"type":["string","null"],"enum":["accelerator","incubator","fellowship","grant","competition","course","other",null]},"organizer":{"type":["string","null"],"minLength":1,"maxLength":160},"application_url":{"type":["string","null"],"format":"uri","maxLength":2048},"application_status":{"$ref":"#/$defs/applicationStatus"},"application_deadline":{"type":["string","null"],"format":"date"},"start_date":{"type":["string","null"],"format":"date"},"end_date":{"type":["string","null"],"format":"date"},"cohort":{"type":["string","null"],"minLength":1,"maxLength":120},"duration":{"type":["string","null"],"minLength":1,"maxLength":120},"format":{"type":["string","null"],"enum":["in_person","remote","hybrid",null]},"eligibility":{"type":"array","maxItems":30,"items":{"type":"string","minLength":1,"maxLength":300}},"focus_areas":{"type":"array","maxItems":30,"items":{"type":"string","minLength":1,"maxLength":120}},"funding_offer":{"type":["string","null"],"minLength":1,"maxLength":500},"equity_terms":{"type":["string","null"],"minLength":1,"maxLength":500},"fee":{"type":["string","null"],"minLength":1,"maxLength":300}}},"investorDetails":{"type":"object","additionalProperties":false,"properties":{"investor_type":{"type":["string","null"],"enum":["angel","venture_capital","corporate_venture","family_office","syndicate","fund","government","other",null]},"thesis":{"type":["string","null"],"minLength":1,"maxLength":3000},"stages":{"type":"array","maxItems":8,"items":{"$ref":"#/$defs/stage"}},"sectors":{"type":"array","maxItems":40,"items":{"type":"string","minLength":1,"maxLength":120}},"geographies":{"type":"array","maxItems":40,"items":{"type":"string","minLength":1,"maxLength":120}},"check_size_min":{"type":["number","null"],"minimum":0},"check_size_max":{"type":["number","null"],"minimum":0},"check_size_currency":{"type":["string","null"],"pattern":"^[A-Z]{3}$"},"leads_rounds":{"type":["boolean","null"]},"portfolio_url":{"type":["string","null"],"format":"uri","maxLength":2048},"pitch_url":{"type":["string","null"],"format":"uri","maxLength":2048},"accepting_pitches":{"type":["boolean","null"]}}},"stage":{"type":"string","enum":["idea","pre-seed","seed","series-a","series-b+","growth","public","bootstrapped"]},"assetId":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/-]*$"},"nullableAssetId":{"anyOf":[{"$ref":"#/$defs/assetId"},{"type":"null"}]},"profileLink":{"type":"object","required":["label","url"],"additionalProperties":false,"properties":{"label":{"type":"string","minLength":1,"maxLength":80},"url":{"type":"string","format":"uri","maxLength":2048},"platform":{"type":["string","null"],"minLength":1,"maxLength":32,"pattern":"^[A-Za-z0-9][A-Za-z0-9_-]*$","description":"Machine-readable lowercase platform identifier. Common values: x, linkedin, facebook, instagram, youtube, tiktok, github, bluesky, threads, mastodon, discord. Other short identifiers are allowed.","examples":["x","instagram","facebook"]}}},"founder":{"type":"object","required":["name"],"additionalProperties":false,"not":{"required":["image_url","image_asset_id"],"properties":{"image_url":{"type":"string"},"image_asset_id":{"type":"string"}}},"properties":{"person_slug":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","minLength":2,"maxLength":80,"description":"Optional stable person identity. Omit to create a listing-scoped person profile; reuse an existing slug only when it is the same person."},"name":{"type":"string","minLength":1,"maxLength":120},"role":{"type":["string","null"],"minLength":1,"maxLength":120},"bio":{"type":["string","null"],"minLength":1,"maxLength":1200},"location":{"type":["string","null"],"minLength":1,"maxLength":120},"image_url":{"type":["string","null"],"format":"uri","maxLength":2048},"image_asset_id":{"$ref":"#/$defs/nullableAssetId"},"links":{"type":"array","maxItems":12,"uniqueItems":true,"items":{"$ref":"#/$defs/profileLink"}},"entry_points":{"type":"array","maxItems":12,"description":"Where to reach this person: booking link, public inbox, office hours, a hosted agent that speaks for them.","items":{"$ref":"#/$defs/entryPoint"}}}},"entryPoint":{"type":"object","required":["kind","url"],"additionalProperties":false,"description":"A URL a reader should use to get into this listing or reach this person, tagged by who it is for. listed_by, derived_from, and on_listing_domain are server-assigned on read and ignored on input.","properties":{"kind":{"type":"string","enum":["homepage","signup","login","demo","book_call","apply","pitch","docs","pricing","changelog","status","blog","security","terms","privacy","agent","agent_card","mcp","api","api_reference","openapi","sdk","github","llms_txt","agent_home","agent_skills","support","contact","careers","portfolio","other"],"description":"Controlled vocabulary; use other with a label when nothing fits."},"url":{"type":"string","format":"uri","maxLength":2048},"audience":{"type":["string","null"],"enum":["human","agent","any",null],"description":"Who this is for. Omit to take the kind's default (for example mcp is for agents, signup is for people)."},"label":{"type":["string","null"],"minLength":1,"maxLength":80},"note":{"type":["string","null"],"minLength":1,"maxLength":300,"description":"Short guidance: auth quirks, region, what to expect."},"auth":{"type":["string","null"],"enum":["none","account","api_key","oauth",null]},"primary":{"type":["boolean","null"],"description":"The front door for its audience. At most one primary for people and one for agents; an entry with audience any counts for both."},"listed_by":{"type":"string","enum":["owner","community","repository"],"description":"Server-assigned from the write's authority: owner (verified claim), community (open contribution), or repository (reviewed YAML)."},"derived_from":{"type":"string","maxLength":80,"description":"Read-only. Present when the entry was projected from an older URL field such as agents.mcp_url."},"on_listing_domain":{"type":["boolean","null"],"description":"Read-only. Whether the URL host is the listing's identity host or one of its subdomains."}}}}}