{
 "openapi": "3.1.0",
 "info": {
  "title": "Qscape API",
  "version": "1.2.0",
  "description": "Qscape (https://qscape.vc): funding rounds into quantum technology companies, with companies, team backgrounds and investors. Public and read-only: no credentials needed. Every citable value carries the quote it was read from and its URL; src 'inferred' means no source states it, do not cite. Amounts are US dollars at the ECB rate on the round date; money.approx marks a vague amount whose usd is a floor. Rebuilt after each daily run; see generated_at and data_date. Add .md to a path (or format=md) for markdown tables. Guides: https://qscape.vc/llms-full.txt and https://qscape.vc/agents. MCP: https://qscape.vc/mcp.",
  "contact": {
   "url": "https://qscape.vc/agents"
  }
 },
 "servers": [
  {
   "url": "https://qscape.vc",
   "description": "Qscape"
  }
 ],
 "paths": {
  "/api/rounds": {
   "get": {
    "summary": "Funding rounds",
    "operationId": "listRounds",
    "parameters": [
     {
      "name": "from",
      "in": "query",
      "required": false,
      "description": "Earliest round date, inclusive (YYYY-MM-DD).",
      "schema": {
       "type": "string",
       "format": "date"
      }
     },
     {
      "name": "to",
      "in": "query",
      "required": false,
      "description": "Latest round date, inclusive (YYYY-MM-DD).",
      "schema": {
       "type": "string",
       "format": "date"
      }
     },
     {
      "name": "segment",
      "in": "query",
      "required": false,
      "description": "Comma-separated segments, case-insensitive.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "subsegment",
      "in": "query",
      "required": false,
      "description": "Comma-separated subsegments.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "stage",
      "in": "query",
      "required": false,
      "description": "Comma-separated stages: Pre-seed, Seed, Series A, Series B, Series C+, Strategic, Unstated.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "country",
      "in": "query",
      "required": false,
      "description": "Comma-separated countries, e.g. United States,Finland.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "min_usd",
      "in": "query",
      "required": false,
      "description": "Minimum amount in USD.",
      "schema": {
       "type": "number"
      }
     },
     {
      "name": "max_usd",
      "in": "query",
      "required": false,
      "description": "Maximum amount in USD.",
      "schema": {
       "type": "number"
      }
     },
     {
      "name": "include_approx",
      "in": "query",
      "required": false,
      "description": "true: compare and sort vague amounts at their floor (money.usd). Default false: only disclosed amount_usd.",
      "schema": {
       "type": "boolean"
      }
     },
     {
      "name": "lead",
      "in": "query",
      "required": false,
      "description": "Substring of the lead investor.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "investor",
      "in": "query",
      "required": false,
      "description": "Substring of the lead or any investor.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "company",
      "in": "query",
      "required": false,
      "description": "Company id, or substring of the company name.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "sort",
      "in": "query",
      "required": false,
      "description": "Sort key, default date. Nulls sort last.",
      "schema": {
       "type": "string",
       "enum": [
        "date",
        "amount_usd",
        "company"
       ],
       "default": "date"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "Page size, 1-500 (default 50).",
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 500,
       "default": 50
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "description": "Rows to skip (default 0).",
      "schema": {
       "type": "integer",
       "minimum": 0,
       "default": 0
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "asc or desc (default desc).",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ],
       "default": "desc"
      }
     },
     {
      "name": "format",
      "in": "query",
      "required": false,
      "description": "md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown).",
      "schema": {
       "type": "string",
       "enum": [
        "json",
        "md"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "A page of rounds",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "total": {
           "type": "integer",
           "description": "Rows matching the filters"
          },
          "limit": {
           "type": "integer"
          },
          "offset": {
           "type": "integer"
          },
          "next_offset": {
           "type": [
            "integer",
            "null"
           ],
           "description": "Offset of the next page; null on the last page"
          },
          "sort": {
           "type": "string"
          },
          "order": {
           "type": "string"
          },
          "generated_at": {
           "type": "string",
           "description": "When this data copy was built (ISO 8601)"
          },
          "data": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Round"
           }
          },
          "data_date": {
           "type": "string",
           "description": "Tracker run date the data comes from (YYYY-MM-DD)"
          }
         }
        }
       },
       "text/markdown": {
        "schema": {
         "type": "string",
         "description": "Markdown version (format=md or .md)"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     }
    }
   }
  },
  "/api/companies": {
   "get": {
    "summary": "Companies (without team and signals)",
    "operationId": "listCompanies",
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "Substring of the name.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "segment",
      "in": "query",
      "required": false,
      "description": "Comma-separated segments.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "subsegment",
      "in": "query",
      "required": false,
      "description": "Comma-separated subsegments.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "country",
      "in": "query",
      "required": false,
      "description": "Comma-separated countries.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "has_team",
      "in": "query",
      "required": false,
      "description": "Only companies with (true) or without (false) team data.",
      "schema": {
       "type": "boolean"
      }
     },
     {
      "name": "has_rounds",
      "in": "query",
      "required": false,
      "description": "Only companies with (true) or without (false) a tracked round.",
      "schema": {
       "type": "boolean"
      }
     },
     {
      "name": "min_total_usd",
      "in": "query",
      "required": false,
      "description": "Minimum sum of disclosed rounds, USD.",
      "schema": {
       "type": "number"
      }
     },
     {
      "name": "raised_since",
      "in": "query",
      "required": false,
      "description": "Last round on or after this date.",
      "schema": {
       "type": "string",
       "format": "date"
      }
     },
     {
      "name": "sort",
      "in": "query",
      "required": false,
      "description": "Sort key, default last_round. Nulls sort last.",
      "schema": {
       "type": "string",
       "enum": [
        "last_round",
        "name",
        "total_usd",
        "rounds"
       ],
       "default": "last_round"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "Page size, 1-500 (default 50).",
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 500,
       "default": 50
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "description": "Rows to skip (default 0).",
      "schema": {
       "type": "integer",
       "minimum": 0,
       "default": 0
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "asc or desc (default desc).",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ],
       "default": "desc"
      }
     },
     {
      "name": "format",
      "in": "query",
      "required": false,
      "description": "md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown).",
      "schema": {
       "type": "string",
       "enum": [
        "json",
        "md"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "A page of companies",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "total": {
           "type": "integer",
           "description": "Rows matching the filters"
          },
          "limit": {
           "type": "integer"
          },
          "offset": {
           "type": "integer"
          },
          "next_offset": {
           "type": [
            "integer",
            "null"
           ],
           "description": "Offset of the next page; null on the last page"
          },
          "sort": {
           "type": "string"
          },
          "order": {
           "type": "string"
          },
          "generated_at": {
           "type": "string",
           "description": "When this data copy was built (ISO 8601)"
          },
          "data": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/CompanySummary"
           }
          },
          "data_date": {
           "type": "string",
           "description": "Tracker run date the data comes from (YYYY-MM-DD)"
          }
         }
        }
       },
       "text/markdown": {
        "schema": {
         "type": "string",
         "description": "Markdown version (format=md or .md)"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     }
    }
   }
  },
  "/api/companies/{id}": {
   "get": {
    "summary": "One company with rounds, team and signals",
    "operationId": "getCompany",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Company id from /api/companies"
     },
     {
      "name": "format",
      "in": "query",
      "required": false,
      "description": "md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown).",
      "schema": {
       "type": "string",
       "enum": [
        "json",
        "md"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "The company",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "generated_at": {
           "type": "string"
          },
          "data": {
           "$ref": "#/components/schemas/Company"
          },
          "data_date": {
           "type": "string",
           "description": "Tracker run date the data comes from (YYYY-MM-DD)"
          }
         }
        }
       },
       "text/markdown": {
        "schema": {
         "type": "string",
         "description": "Markdown version (format=md or .md)"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     }
    }
   }
  },
  "/api/investors": {
   "get": {
    "summary": "Investors",
    "operationId": "listInvestors",
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": false,
      "description": "Substring of the name.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "type",
      "in": "query",
      "required": false,
      "description": "Comma-separated firm types, e.g. venture capital.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "led",
      "in": "query",
      "required": false,
      "description": "true: led at least one tracked round; false: led none.",
      "schema": {
       "type": "boolean"
      }
     },
     {
      "name": "min_rounds",
      "in": "query",
      "required": false,
      "description": "Minimum distinct rounds led or joined.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "min_fund_usd",
      "in": "query",
      "required": false,
      "description": "Minimum fund size in USD.",
      "schema": {
       "type": "number"
      }
     },
     {
      "name": "company",
      "in": "query",
      "required": false,
      "description": "Company id, or substring of a company name the investor backed.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "sort",
      "in": "query",
      "required": false,
      "description": "Sort key, default rounds_in. Nulls sort last.",
      "schema": {
       "type": "string",
       "enum": [
        "rounds_in",
        "rounds_led",
        "name",
        "fund_usd"
       ],
       "default": "rounds_in"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "Page size, 1-500 (default 50).",
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 500,
       "default": 50
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "description": "Rows to skip (default 0).",
      "schema": {
       "type": "integer",
       "minimum": 0,
       "default": 0
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "asc or desc (default desc).",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ],
       "default": "desc"
      }
     },
     {
      "name": "format",
      "in": "query",
      "required": false,
      "description": "md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown).",
      "schema": {
       "type": "string",
       "enum": [
        "json",
        "md"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "A page of investors",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "total": {
           "type": "integer",
           "description": "Rows matching the filters"
          },
          "limit": {
           "type": "integer"
          },
          "offset": {
           "type": "integer"
          },
          "next_offset": {
           "type": [
            "integer",
            "null"
           ],
           "description": "Offset of the next page; null on the last page"
          },
          "sort": {
           "type": "string"
          },
          "order": {
           "type": "string"
          },
          "generated_at": {
           "type": "string",
           "description": "When this data copy was built (ISO 8601)"
          },
          "data": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Investor"
           }
          },
          "data_date": {
           "type": "string",
           "description": "Tracker run date the data comes from (YYYY-MM-DD)"
          }
         }
        }
       },
       "text/markdown": {
        "schema": {
         "type": "string",
         "description": "Markdown version (format=md or .md)"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     }
    }
   }
  },
  "/api/search": {
   "get": {
    "summary": "Search names across companies, investors, people and rounds",
    "operationId": "search",
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "description": "Search text, 2+ characters.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "Hits per kind, 1-50 (default 10).",
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 50,
       "default": 10
      }
     },
     {
      "name": "format",
      "in": "query",
      "required": false,
      "description": "md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown).",
      "schema": {
       "type": "string",
       "enum": [
        "json",
        "md"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Hits per kind, best first",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "q": {
           "type": "string"
          },
          "generated_at": {
           "type": "string"
          },
          "companies": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/CompanySummary"
           }
          },
          "investors": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Investor"
           }
          },
          "people": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Person"
           }
          },
          "rounds": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Round"
           }
          },
          "data_date": {
           "type": "string",
           "description": "Tracker run date the data comes from (YYYY-MM-DD)"
          }
         }
        }
       },
       "text/markdown": {
        "schema": {
         "type": "string",
         "description": "Markdown version (format=md or .md)"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     }
    }
   }
  },
  "/api/meta": {
   "get": {
    "summary": "Freshness, source health, field coverage, money rules, vocabulary",
    "operationId": "meta",
    "responses": {
     "200": {
      "description": "Metadata",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Meta"
        }
       },
       "text/markdown": {
        "schema": {
         "type": "string",
         "description": "Markdown version (format=md or .md)"
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     }
    },
    "parameters": [
     {
      "name": "format",
      "in": "query",
      "required": false,
      "description": "md: markdown tables instead of JSON (same as adding .md to the path, or Accept: text/markdown).",
      "schema": {
       "type": "string",
       "enum": [
        "json",
        "md"
       ]
      }
     }
    ]
   }
  }
 },
 "components": {
  "responses": {
   "BadRequest": {
    "description": "A parameter is invalid; error says which, docs links the reference.",
    "content": {
     "application/json": {
      "schema": {
       "type": "object",
       "properties": {
        "error": {
         "type": "string"
        },
        "docs": {
         "type": "string"
        },
        "help": {
         "type": "string"
        }
       }
      }
     }
    }
   },
   "NotFound": {
    "description": "No record with that id; hint says how to find ids.",
    "content": {
     "application/json": {
      "schema": {
       "type": "object",
       "properties": {
        "error": {
         "type": "string"
        },
        "hint": {
         "type": "string"
        },
        "help": {
         "type": "string"
        }
       }
      }
     }
    }
   }
  },
  "schemas": {
   "Money": {
    "type": [
     "object",
     "null"
    ],
    "description": "An amount as written and in USD.",
    "properties": {
     "orig": {
      "type": "string",
      "description": "Amount as written in the source"
     },
     "label": {
      "type": "string",
      "description": "Display label (same as orig, or the parsed amount)"
     },
     "cur": {
      "type": "string",
      "description": "ISO 4217 currency of the original"
     },
     "value": {
      "type": [
       "number",
       "null"
      ],
      "description": "Amount in the original currency"
     },
     "usd": {
      "type": [
       "number",
       "null"
      ],
      "description": "US dollars at the ECB rate on rate_date; the floor when approx"
     },
     "rate": {
      "type": [
       "number",
       "null"
      ],
      "description": "USD per unit of cur"
     },
     "rate_date": {
      "type": "string",
      "description": "ECB rate date: the round date or the last business day before it"
     },
     "approx": {
      "type": "boolean",
      "description": "Vague amount; usd is its floor, never a disclosed amount"
     },
     "src": {
      "type": "string",
      "description": "ECB, or USD when no conversion was needed"
     }
    }
   },
   "Evidence": {
    "type": "object",
    "description": "A citable value.",
    "properties": {
     "value": {
      "description": "The value"
     },
     "quote": {
      "type": [
       "string",
       "null"
      ],
      "description": "Exact sentence or headline the value was read from; null when src is inferred"
     },
     "url": {
      "type": [
       "string",
       "null"
      ],
      "description": "Source page; null when src is inferred"
     },
     "src": {
      "type": "string",
      "description": "Where it came from: article, headline, SEC Form D, round_facts, company website, Wikidata, ...; inferred = no source text states it, do not cite"
     }
    }
   },
   "Round": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string",
      "description": "company_id-date"
     },
     "company_id": {
      "type": "string",
      "description": "Company id (slug of the name), for /api/companies/{id}"
     },
     "company": {
      "type": "string",
      "description": "Company name"
     },
     "date": {
      "type": "string",
      "description": "Round date (first non-government headline)",
      "format": "date"
     },
     "amount_usd": {
      "type": [
       "number",
       "null"
      ],
      "description": "Disclosed amount in USD at the round-date ECB rate; null when undisclosed or vague"
     },
     "amount_as_written": {
      "type": [
       "string",
       "null"
      ],
      "description": "Amount text as the source wrote it, or null"
     },
     "money": {
      "$ref": "#/components/schemas/Money",
      "description": "The amount as written and converted (see Money); null with no amount"
     },
     "stage": {
      "type": "string",
      "description": "Pre-seed, Seed, Series A, Series B, Series C+, Strategic or Unstated"
     },
     "lead": {
      "type": [
       "string",
       "null"
      ],
      "description": "Lead investor(s), as named"
     },
     "investors": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "Lead and participating investors named in the round's articles"
     },
     "country": {
      "type": [
       "string",
       "null"
      ],
      "description": "Country of the company (English name), or null"
     },
     "segment": {
      "type": "string",
      "description": "Market segment: Computing, Networking, Security, Sensing, Photonics, Software, Enabling or Other"
     },
     "subsegment": {
      "type": [
       "string",
       "null"
      ],
      "description": "Subsegment within the segment, or null"
     },
     "evidence": {
      "type": "object",
      "description": "Quote and URL per field",
      "properties": {
       "amount": {
        "$ref": "#/components/schemas/Evidence"
       },
       "stage": {
        "$ref": "#/components/schemas/Evidence"
       },
       "lead": {
        "$ref": "#/components/schemas/Evidence"
       },
       "country": {
        "$ref": "#/components/schemas/Evidence"
       },
       "city": {
        "$ref": "#/components/schemas/Evidence"
       },
       "founded": {
        "$ref": "#/components/schemas/Evidence"
       },
       "use_of_funds": {
        "$ref": "#/components/schemas/Evidence"
       },
       "investors": {
        "type": "array",
        "items": {
         "$ref": "#/components/schemas/Evidence"
        }
       }
      }
     },
     "sources": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "title": {
         "type": "string"
        },
        "url": {
         "type": "string"
        },
        "outlet": {
         "type": "string"
        },
        "date": {
         "type": "string"
        }
       }
      },
      "description": "Headlines and filings behind the round"
     },
     "origin": {
      "type": "string",
      "description": "press or cn press"
     }
    }
   },
   "Fact": {
    "type": "object",
    "properties": {
     "field": {
      "type": "string",
      "description": "education, academic_position, prior_employer, prior_company, exit, publications, h_index, role"
     },
     "value": {
      "description": "The fact as read"
     },
     "quote": {
      "type": "string",
      "description": "Exact sentence the fact was read from"
     },
     "url": {
      "type": "string",
      "description": "Source page"
     },
     "src": {
      "type": "string",
      "description": "Source kind: press, LinkedIn profile, Wikidata, Companies House, OpenAlex, ..."
     },
     "status": {
      "type": "string",
      "description": "verified (2+ independent sources) or single"
     }
    }
   },
   "Person": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string",
      "description": "Person id: company id plus a slug of the name"
     },
     "company_id": {
      "type": "string",
      "description": "Company id"
     },
     "company": {
      "type": "string",
      "description": "Company name"
     },
     "name": {
      "type": "string",
      "description": "Full name"
     },
     "role": {
      "type": "string",
      "description": "Role at the company, as stated in the source"
     },
     "facts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Fact"
      },
      "description": "Background facts, each with quote, url, src and status"
     },
     "checks": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "field": {
         "type": "string"
        },
        "claim": {
         "type": "string"
        },
        "status": {
         "type": "string",
         "description": "verified, single or conflict"
        },
        "sources": {
         "type": "array",
         "items": {
          "type": "string"
         }
        }
       }
      },
      "description": "Cross-source checks per claim: status verified, single or conflict"
     },
     "linkedin": {
      "type": [
       "string",
       "null"
      ],
      "description": "LinkedIn profile URL, or null"
     }
    }
   },
   "CompanySummary": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string",
      "description": "Company id (slug of the name, stable across rebuilds)"
     },
     "name": {
      "type": "string",
      "description": "Company name"
     },
     "segment": {
      "type": "string",
      "description": "Market segment"
     },
     "subsegment": {
      "type": [
       "string",
       "null"
      ],
      "description": "Subsegment, or null"
     },
     "subsegment_evidence": {
      "oneOf": [
       {
        "$ref": "#/components/schemas/Evidence"
       },
       {
        "type": "null"
       }
      ],
      "description": "Evidence for the subsegment ({value, quote, url, src}), or null"
     },
     "country": {
      "type": [
       "string",
       "null"
      ],
      "description": "From its latest round with a country"
     },
     "rounds": {
      "type": "integer",
      "description": "Number of rounds tracked"
     },
     "round_ids": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "Ids of those rounds, newest first"
     },
     "last_round": {
      "type": [
       "string",
       "null"
      ],
      "description": "Date of the latest round (YYYY-MM-DD), or null"
     },
     "total_usd": {
      "type": [
       "number",
       "null"
      ],
      "description": "Sum of disclosed round amounts, USD"
     },
     "team_size": {
      "type": "integer",
      "description": "People on record"
     },
     "signal_count": {
      "type": "integer",
      "description": "Signals on record (up to 20 kept per company)"
     },
     "profile": {
      "oneOf": [
       {
        "$ref": "#/components/schemas/CompanyProfile"
       },
       {
        "type": "null"
       }
      ],
      "description": "What the company does, why it matters, HQ and founders, with quotes; see CompanyProfile"
     }
    }
   },
   "Company": {
    "type": "object",
    "description": "CompanySummary fields plus team, signals and full rounds (rounds replaces the count).",
    "properties": {
     "id": {
      "type": "string",
      "description": "Company id"
     },
     "name": {
      "type": "string",
      "description": "Company name"
     },
     "segment": {
      "type": "string",
      "description": "Market segment"
     },
     "subsegment": {
      "type": [
       "string",
       "null"
      ],
      "description": "Subsegment, or null"
     },
     "country": {
      "type": [
       "string",
       "null"
      ],
      "description": "Country, or null"
     },
     "last_round": {
      "type": [
       "string",
       "null"
      ],
      "description": "Date of the latest round, or null"
     },
     "total_usd": {
      "type": [
       "number",
       "null"
      ],
      "description": "Sum of disclosed round amounts in US dollars, or null"
     },
     "team": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Person"
      },
      "description": "People with background facts (see Person, without id/company fields)"
     },
     "rounds": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Round"
      },
      "description": "The full Round records"
     },
     "signals": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "date": {
         "type": "string"
        },
        "kind": {
         "type": "string"
        },
        "network": {
         "type": "string"
        },
        "author": {
         "type": [
          "string",
          "null"
         ]
        },
        "text": {
         "type": "string"
        },
        "url": {
         "type": "string"
        },
        "people": {
         "type": "array",
         "items": {
          "type": "string"
         }
        }
       }
      },
      "description": "Up to 20 recent signals: {date, kind, network, author, text, url, people}"
     },
     "profile": {
      "oneOf": [
       {
        "$ref": "#/components/schemas/CompanyProfile"
       },
       {
        "type": "null"
       }
      ],
      "description": "What the company does, why it matters, HQ and founders, with quotes; see CompanyProfile"
     },
     "novelty": {
      "oneOf": [
       {
        "type": "object",
        "additionalProperties": {
         "$ref": "#/components/schemas/NoveltyGrade"
        },
        "description": "Keyed by axis: only the axes that passed the hand check (team, bottleneck)"
       },
       {
        "type": "null"
       }
      ],
      "description": "How rare the company is on each hand-checked axis (tools/novelty.py); null when no axis is wired"
     }
    }
   },
   "Investor": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string",
      "description": "Investor id (slug of the name)"
     },
     "name": {
      "type": "string",
      "description": "Investor name as written in the round sources"
     },
     "kind": {
      "type": [
       "string",
       "null"
      ],
      "description": "firm (an organisation) or angel (a person investing in their own name); null when the tracker could not tell"
     },
     "partners": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "People the round articles quote as a partner of this firm, shown as Firm (Person)"
     },
     "type": {
      "type": [
       "string",
       "null"
      ],
      "description": "Firm type"
     },
     "fund_usd": {
      "type": [
       "number",
       "null"
      ],
      "description": "Fund or AUM in USD at the export day's rate"
     },
     "fund": {
      "$ref": "#/components/schemas/Money",
      "description": "Latest fund size as written and converted (see Money), or null"
     },
     "fund_kind": {
      "type": [
       "string",
       "null"
      ],
      "description": "fund or under management"
     },
     "how": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "How the tracker saw them"
     },
     "rounds_led": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "Round ids"
     },
     "rounds_in": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "Round ids they joined or led"
     },
     "companies": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "company_id": {
         "type": "string"
        },
        "company": {
         "type": "string"
        },
        "date": {
         "type": "string"
        }
       }
      },
      "description": "Companies the investor was seen with: {company_id, company, date}"
     },
     "facts": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "field": {
         "type": "string",
         "description": "firm_type, fund_size, deal_partner, quantum_portfolio"
        },
        "value": {},
        "quote": {
         "type": "string"
        },
        "url": {
         "type": "string"
        },
        "src": {
         "type": "string"
        }
       }
      },
      "description": "Facts about the investor, each with quote and url"
     }
    }
   },
   "Meta": {
    "type": "object",
    "properties": {
     "sector": {
      "type": "string",
      "description": "Sector key (quantum)"
     },
     "generated_at": {
      "type": "string",
      "description": "When this copy was built (ISO 8601 with offset)"
     },
     "data_date": {
      "type": "string",
      "description": "Tracker run date (YYYY-MM-DD)"
     },
     "update_schedule": {
      "type": "string",
      "description": "When the data is rebuilt"
     },
     "counts": {
      "type": "object",
      "description": "Rows per dataset: rounds, companies, people, investors, signals"
     },
     "money_rules": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "How amounts are converted and flagged"
     },
     "field_coverage": {
      "type": "object",
      "description": "Per dataset and field: {filled, of}"
     },
     "source_health": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "src": {
         "type": "string"
        },
        "date": {
         "type": "string"
        },
        "fetched": {
         "type": "integer"
        },
        "added": {
         "type": "integer"
        },
        "secs": {
         "type": [
          "number",
          "null"
         ]
        },
        "error": {
         "type": "string"
        },
        "method": {
         "type": "string"
        },
        "fallback": {
         "type": "string"
        }
       }
      },
      "description": "Last run per source: rows fetched and added, error, method that served it"
     },
     "recall": {
      "type": "object",
      "description": "Share of known rounds the press sources caught"
     },
     "vocab": {
      "type": "object",
      "description": "Valid stages, segments and subsegments (per segment)"
     }
    }
   },
   "CompanyProfile": {
    "type": [
     "object",
     "null"
    ],
    "description": "What the company does and who founded it (tools/profiles.py). Only fields that passed a 25-company hand check at 90%+ precision are present: tldr, why_novel, why_useful, why_money, bottleneck, approach, hq, founders. Every value carries its verbatim quotes and URLs in evidence. null: no profile.",
    "properties": {
     "tldr": {
      "type": [
       "string",
       "null"
      ],
      "description": "One or two plain-English sentences on what the company does, written only from its fetched sources (company site, round articles, round_facts, subsegment quote); null when no source says"
     },
     "why_novel": {
      "type": [
       "string",
       "null"
      ],
      "description": "What the sources say sets its technology or approach apart, or null"
     },
     "why_useful": {
      "type": [
       "string",
       "null"
      ],
      "description": "What problem it solves or who uses it, as the sources say, or null"
     },
     "why_money": {
      "type": [
       "string",
       "null"
      ],
      "description": "What the raise is for, only when a source says so, or null"
     },
     "bottleneck": {
      "type": [
       "object",
       "null"
      ],
      "description": "The problem or limit the company works on, in one plain sentence, only as its sources state it (never a novelty claim); null without a source",
      "properties": {
       "text": {
        "type": [
         "string",
         "null"
        ],
        "description": "One sentence"
       },
       "quote": {
        "type": [
         "string",
         "null"
        ],
        "description": "Verbatim quote it was written from"
       },
       "src": {
        "type": [
         "string",
         "null"
        ],
        "description": "Source URL"
       }
      }
     },
     "approach": {
      "type": [
       "object",
       "null"
      ],
      "description": "How the company goes at that problem, in one plain sentence, only as its sources state it (never a novelty claim); null without a source",
      "properties": {
       "text": {
        "type": [
         "string",
         "null"
        ],
        "description": "One sentence"
       },
       "quote": {
        "type": [
         "string",
         "null"
        ],
        "description": "Verbatim quote it was written from"
       },
       "src": {
        "type": [
         "string",
         "null"
        ],
        "description": "Source URL"
       }
      }
     },
     "hq": {
      "type": [
       "object",
       "null"
      ],
      "description": "Headquarters: city, country, src (URL), q (quote), via (round_details rules or model with quote)",
      "properties": {
       "city": {
        "type": [
         "string",
         "null"
        ],
        "description": "City"
       },
       "country": {
        "type": [
         "string",
         "null"
        ],
        "description": "Country"
       },
       "src": {
        "type": [
         "string",
         "null"
        ],
        "description": "URL"
       },
       "q": {
        "type": [
         "string",
         "null"
        ],
        "description": "Quote"
       },
       "via": {
        "type": [
         "string",
         "null"
        ],
        "description": "round_details or model"
       }
      }
     },
     "founders": {
      "type": "array",
      "description": "Founders, CEO and CTO: people.json background checks plus people the sources name with a quote",
      "items": {
       "type": "object",
       "properties": {
        "name": {
         "type": "string"
        },
        "role": {
         "type": [
          "string",
          "null"
         ],
         "description": "Role as the source states it"
        },
        "src": {
         "type": [
          "string",
          "null"
         ],
         "description": "URL naming them"
        },
        "quotes": {
         "type": "array",
         "items": {
          "type": "object",
          "properties": {
           "q": {
            "type": "string",
            "description": "Verbatim quote from the source"
           },
           "u": {
            "type": "string",
            "description": "Source URL"
           }
          }
         }
        },
        "education": {
         "type": "array",
         "items": {
          "type": "object",
          "properties": {
           "school": {
            "type": [
             "string",
             "null"
            ],
            "description": "School"
           },
           "degree": {
            "type": [
             "string",
             "null"
            ],
            "description": "Degree, or null"
           },
           "src": {
            "type": [
             "string",
             "null"
            ],
            "description": "URL of the source that states it"
           },
           "status": {
            "type": "string",
            "description": "verified (two source families agree), single (one) or conflict (sources disagree)"
           },
           "quotes": {
            "type": "array",
            "items": {
             "type": "object",
             "properties": {
              "q": {
               "type": "string",
               "description": "Verbatim quote from the source"
              },
              "u": {
               "type": "string",
               "description": "Source URL"
              }
             }
            }
           }
          }
         }
        },
        "experience": {
         "type": "array",
         "items": {
          "type": "object",
          "properties": {
           "org": {
            "type": [
             "string",
             "null"
            ],
            "description": "Earlier organisation"
           },
           "title": {
            "type": [
             "string",
             "null"
            ],
            "description": "Title there"
           },
           "years": {
            "type": [
             "string",
             "null"
            ],
            "description": "Years, as stated"
           },
           "outcome": {
            "type": [
             "string",
             "null"
            ],
            "description": "What happened to it (e.g. acquired by X 2021), only when stated"
           },
           "src": {
            "type": [
             "string",
             "null"
            ],
            "description": "URL of the source that states it"
           },
           "status": {
            "type": "string",
            "description": "verified (two source families agree), single (one) or conflict (sources disagree)"
           },
           "quotes": {
            "type": "array",
            "items": {
             "type": "object",
             "properties": {
              "q": {
               "type": "string",
               "description": "Verbatim quote from the source"
              },
              "u": {
               "type": "string",
               "description": "Source URL"
              }
             }
            }
           }
          }
         }
        }
       }
      }
     },
     "evidence": {
      "type": "object",
      "description": "Per field, the verbatim quotes and URLs it was written from",
      "additionalProperties": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "q": {
          "type": "string",
          "description": "Verbatim quote from the source"
         },
         "u": {
          "type": "string",
          "description": "Source URL"
         }
        }
       }
      }
     },
     "sources": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "Every URL the shown fields cite"
     },
     "model": {
      "type": [
       "string",
       "null"
      ],
      "description": "Model that wrote the summaries (claude-sonnet, or grok (backup))"
     },
     "generated_at": {
      "type": [
       "string",
       "null"
      ],
      "description": "When the model wrote it (ISO 8601)"
     }
    }
   },
   "NoveltyGrade": {
    "type": "object",
    "description": "One axis of tools/novelty.py. Rare: a bottleneck category shared by the rarest tenth of companies with a stated bottleneck, or a verified founder fact held by a tenth or fewer of comparable founders. Common: shared more widely. Unclear: stated but too general to compare, or the rare fact rests on one source. Not found: nothing in the sources read.",
    "properties": {
     "grade": {
      "type": "string",
      "enum": [
       "Rare",
       "Common",
       "Unclear",
       "Not found"
      ]
     },
     "why": {
      "type": [
       "string",
       "null"
      ],
      "description": "The grade in words, with its count, e.g. '2 of 165 companies with a stated bottleneck target ...'"
     },
     "text": {
      "type": [
       "string",
       "null"
      ],
      "description": "bottleneck: the profile's statement"
     },
     "quote": {
      "type": [
       "string",
       "null"
      ],
      "description": "bottleneck: the source sentence the grade rests on"
     },
     "src": {
      "type": [
       "string",
       "null"
      ],
      "description": "bottleneck: URL of that source"
     },
     "category": {
      "type": [
       "string",
       "null"
      ],
      "description": "bottleneck: category id in novelty_taxonomy.json"
     },
     "label": {
      "type": [
       "string",
       "null"
      ],
      "description": "bottleneck: category in words"
     },
     "n": {
      "type": [
       "integer",
       "null"
      ],
      "description": "bottleneck: companies sharing the category"
     },
     "of": {
      "type": [
       "integer",
       "null"
      ],
      "description": "bottleneck: companies with a stated bottleneck"
     },
     "facts": {
      "type": "array",
      "description": "team: founder attributes compared, each {founder, attr, label, status, quote, src, n, of, basis, rare}",
      "items": {
       "type": "object"
      }
     }
    }
   }
  }
 }
}
