{
  "openapi": "3.1.0",
  "info": {
    "title": "London Mempool API",
    "version": "1.0.0",
    "summary": "Free, read-only data on London's best tech companies.",
    "description": "A free, verifiable dataset of London's best tech companies. Each record is matched to Companies House where possible, and funding, address and growth claims each link to a source URL.\n\nWho gets in:\n\nA tech company gets in if it is operating today, has a real office or a major team in London, clears one of the three stage bars below, and every fact about it can be backed by a public source.\n\n- Well known (`well_known`): a household name in tech, or valued at $1B or more, or 500+ staff.\n- Fastest growing (`fast_growing`): raised $20M or more in equity in the last 24 months, or grew 2x (revenue or headcount) in 2 years.\n- Up and coming (`up_and_coming`): early stage, with real traction (customers, revenue or a product in use) or backing from top investors.\n\nA company sits in the highest stage it qualifies for.\n\nNo key needed. CORS is open. Responses are cached at the edge.\n\nDataset last updated 2026-10-09.\n\nAn MCP server with the same search is at /mcp (Streamable HTTP). A plain text guide for LLMs is at /llms.txt.\n\nEvery change to the dataset is logged by day at /changes.json and in an RSS feed at /feed.xml.\n\nContext places (VCs, big tech, universities, accelerators, coworking) are at /places.json. They are landmarks, not ranked companies.\n\nInvestors named in sources, with how many companies each backs, are at /investors.json.",
    "license": {
      "name": "Free to use, including commercial use, with attribution to London Mempool (https://londonmempool.co.uk).",
      "url": "https://londonmempool.co.uk/developers#license"
    },
    "contact": {
      "name": "Jonathan Breton",
      "url": "https://www.linkedin.com/in/jonathan-breton-501091181"
    }
  },
  "externalDocs": {
    "description": "Developer docs",
    "url": "https://londonmempool.co.uk/developers"
  },
  "servers": [
    {
      "url": "https://londonmempool.co.uk"
    }
  ],
  "tags": [
    {
      "name": "companies",
      "description": "Search and fetch companies."
    },
    {
      "name": "dataset",
      "description": "Dataset metadata and full dumps."
    }
  ],
  "paths": {
    "/api/v1/companies": {
      "get": {
        "operationId": "searchCompanies",
        "tags": [
          "companies"
        ],
        "summary": "Search companies",
        "description": "Filter, sort and page through companies. Filters combine with AND. Multi-value filters (sector, tier, area, presence, work_model, investor, accelerator, cohort, ecosystem) match any of the given values and accept a comma-separated list or repeated parameters. Unknown parameters and invalid values return 400.",
        "parameters": [
          {
            "name": "sector",
            "in": "query",
            "description": "One or more sectors. Case-insensitive. Matches the primary sector or sector_secondary, so an AI drug discovery lab (Health primary, AI secondary) is returned for sector=AI. Add primary_only=true to match the primary sector only. Example: sector=AI,Fintech",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "AI",
                  "Fintech",
                  "Quantum",
                  "Crypto",
                  "Defence",
                  "Deeptech",
                  "Health",
                  "Climate",
                  "Other"
                ]
              }
            }
          },
          {
            "name": "primary_only",
            "in": "query",
            "description": "primary_only=true makes the sector filter check the primary sector only, so results line up with the sector counts in /api/v1/meta. Default false. No effect without sector.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "tier",
            "in": "query",
            "description": "One or more tiers. Example: tier=fast_growing,up_and_coming",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "well_known",
                  "fast_growing",
                  "up_and_coming"
                ]
              }
            }
          },
          {
            "name": "borough",
            "in": "query",
            "description": "London borough, exact match, case-insensitive. Example: borough=Camden. See /api/v1/meta for the list.",
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          },
          {
            "name": "area",
            "in": "query",
            "description": "One or more tech neighbourhoods by slug, e.g. area=kings-cross,shoreditch-old-street. Derived from each office's coordinates. See /api/v1/meta for slugs and counts.",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "kings-cross",
                  "euston-regents-place",
                  "camden",
                  "shoreditch-old-street",
                  "liverpool-street-spitalfields",
                  "aldgate-whitechapel",
                  "southwark-london-bridge",
                  "holborn-bloomsbury",
                  "clerkenwell-farringdon",
                  "city-bank",
                  "canary-wharf",
                  "fitzrovia",
                  "soho-covent-garden",
                  "mayfair-st-jamess",
                  "victoria-westminster",
                  "paddington",
                  "marylebone",
                  "white-city-shepherds-bush",
                  "elsewhere"
                ]
              }
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Text search over name, subsector and description. Case and accent insensitive. Every word must appear. Example: q=payments api",
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "min_funding_usd",
            "in": "query",
            "description": "Only companies with total_funding_usd at or above this value. Excludes companies with unknown funding.",
            "schema": {
              "type": "number",
              "minimum": 0
            }
          },
          {
            "name": "min_staff",
            "in": "query",
            "description": "Only companies whose latest Companies House accounts give at least this many average employees (ch_employees.count). Excludes companies with no figure.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000000
            }
          },
          {
            "name": "founded_after",
            "in": "query",
            "description": "Only companies founded strictly after this year. founded_after=2019 returns 2020 onwards. Excludes companies with unknown founding year.",
            "schema": {
              "type": "integer",
              "minimum": 1800,
              "maximum": 2100
            }
          },
          {
            "name": "raised_since",
            "in": "query",
            "description": "A month as YYYY-MM. Only companies whose last round (last_round_month) is in or after that month and raised equity (last_round_kind equity or mixed). Companies with no month on their last round, or a debt, grant or unclear last round, never match. It reads the most recent round on record only. Example: raised_since=2026-01",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "examples": [
                "2026-01"
              ]
            }
          },
          {
            "name": "hiring",
            "in": "query",
            "description": "hiring=true returns companies with at least one open London role on their public job board. hiring=false returns the rest, including companies with no board found.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "visa_sponsor",
            "in": "query",
            "description": "visa_sponsor=true returns companies on the Home Office register of licensed Worker sponsors. visa_sponsor=false returns the rest (no exact match found).",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "open_source",
            "in": "query",
            "description": "open_source=true returns companies whose own website links a GitHub organisation (github_org). open_source=false returns the rest, including companies whose site links none.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "presence",
            "in": "query",
            "description": "One or more London presence values. hq = main HQ in London, office = London office with HQ elsewhere, people = London staff with no office. Companies not yet checked (presence null) never match. Example: presence=hq,office",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "hq",
                  "office",
                  "people"
                ]
              }
            }
          },
          {
            "name": "work_model",
            "in": "query",
            "description": "One or more work models read from the company's current London job posts (see work_model). Companies with too few typed posts (work_model null) or a mixed model never match. Example: work_model=hybrid,remote",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "onsite",
                  "hybrid",
                  "remote"
                ]
              }
            }
          },
          {
            "name": "investor",
            "in": "query",
            "description": "One or more investor slugs (see /investors.json). Returns companies a fetched source names that investor as backing. Example: investor=index-ventures,seedcamp",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
                "maxLength": 100
              }
            }
          },
          {
            "name": "accelerator",
            "in": "query",
            "description": "One or more accelerator programme slugs. Returns companies the programme's own public list names, matched by website domain (see accelerators). Example: accelerator=y-combinator",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "y-combinator",
                  "antler",
                  "founders-factory",
                  "conception-x"
                ]
              }
            }
          },
          {
            "name": "cohort",
            "in": "query",
            "description": "One or more recognition list slugs (any edition year). Returns companies the publisher's own list names (see cohorts). Example: cohort=sifted-100-uk-ireland",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "sifted-100-uk-ireland",
                  "tech-nation-future-fifty",
                  "tech-nation-upscale",
                  "deloitte-uk-fast-50",
                  "linkedin-top-startups-uk",
                  "forbes-ai-50"
                ]
              }
            }
          },
          {
            "name": "ecosystem",
            "in": "query",
            "description": "One or more blockchain ecosystem slugs. Returns crypto companies whose own site, docs or announcement names that chain as the one their product is built on or primarily supports (see ecosystems). Example: ecosystem=ethereum",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "ethereum",
                  "bitcoin",
                  "solana",
                  "polygon",
                  "base",
                  "arbitrum",
                  "optimism",
                  "avalanche",
                  "cosmos",
                  "polkadot",
                  "stellar",
                  "xrp-ledger",
                  "tezos",
                  "cardano",
                  "ton",
                  "sui",
                  "aptos",
                  "near",
                  "bnb-chain",
                  "starknet",
                  "zksync",
                  "plasma"
                ]
              }
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sort key. Unknown values (null funding or founding year) always sort last.",
            "schema": {
              "type": "string",
              "enum": [
                "name",
                "funding",
                "founded"
              ],
              "default": "name"
            }
          },
          {
            "name": "order",
            "in": "query",
            "description": "Sort direction. Default depends on sort: name=asc, funding=desc, founded=desc.",
            "schema": {
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 20
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Number of results to skip.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of matching companies.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "total",
                    "limit",
                    "offset",
                    "updated",
                    "license",
                    "source"
                  ],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Company"
                      }
                    },
                    "total": {
                      "type": "integer",
                      "description": "Total matches before paging."
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "offset": {
                      "type": "integer"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date",
                      "description": "Latest verification date in the dataset."
                    },
                    "license": {
                      "type": "string",
                      "description": "Usage terms. Attribution to London Mempool is required."
                    },
                    "source": {
                      "type": "string",
                      "format": "uri",
                      "description": "Canonical source of the data."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/companies/{id}": {
      "get": {
        "operationId": "getCompany",
        "tags": [
          "companies"
        ],
        "summary": "Get one company",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Company id (slug) from search results.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The company.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "data",
                    "updated",
                    "license",
                    "source"
                  ],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Company"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date",
                      "description": "Latest verification date in the dataset."
                    },
                    "license": {
                      "type": "string",
                      "description": "Usage terms. Attribution to London Mempool is required."
                    },
                    "source": {
                      "type": "string",
                      "format": "uri",
                      "description": "Canonical source of the data."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No company with that id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/meta": {
      "get": {
        "operationId": "getMeta",
        "tags": [
          "dataset"
        ],
        "summary": "Dataset metadata and counts",
        "description": "Counts by sector, tier, borough and neighbourhood (area), the updated date, license, endpoints and a description of every field.",
        "responses": {
          "200": {
            "description": "Dataset metadata.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "name",
                    "total",
                    "updated",
                    "license",
                    "attribution",
                    "source",
                    "fields",
                    "sectors",
                    "tiers",
                    "boroughs",
                    "areas"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "total": {
                      "type": "integer"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date",
                      "description": "Latest verification date in the dataset."
                    },
                    "license": {
                      "type": "string",
                      "description": "Usage terms. Attribution to London Mempool is required."
                    },
                    "source": {
                      "type": "string",
                      "format": "uri",
                      "description": "Canonical source of the data."
                    },
                    "attribution": {
                      "type": "string",
                      "description": "Suggested attribution line."
                    },
                    "verification": {
                      "type": "string",
                      "description": "How records are verified."
                    },
                    "endpoints": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "string"
                      }
                    },
                    "fields": {
                      "type": "object",
                      "description": "Field name to description.",
                      "additionalProperties": {
                        "type": "string"
                      }
                    },
                    "sectors": {
                      "type": "array",
                      "description": "count = companies with this primary sector (sums to total). also = companies with it as sector_secondary, counted separately.",
                      "items": {
                        "$ref": "#/components/schemas/SectorCount"
                      }
                    },
                    "tiers": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Count"
                      }
                    },
                    "boroughs": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Count"
                      }
                    },
                    "areas": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Count"
                      },
                      "description": "Every neighbourhood slug (key) with its count. Use key as the area filter."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/companies.json": {
      "get": {
        "operationId": "getDataset",
        "tags": [
          "dataset"
        ],
        "summary": "Full dataset",
        "description": "Every company in one file, with attribution fields. A CSV version is at /london-mempool.csv.",
        "responses": {
          "200": {
            "description": "The full dataset.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "name",
                    "total",
                    "updated",
                    "license",
                    "attribution",
                    "source",
                    "data"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "total": {
                      "type": "integer"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date",
                      "description": "Latest verification date in the dataset."
                    },
                    "license": {
                      "type": "string",
                      "description": "Usage terms. Attribution to London Mempool is required."
                    },
                    "source": {
                      "type": "string",
                      "format": "uri",
                      "description": "Canonical source of the data."
                    },
                    "attribution": {
                      "type": "string"
                    },
                    "verification": {
                      "type": "string"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Company"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/places.json": {
      "get": {
        "operationId": "getPlaces",
        "tags": [
          "dataset"
        ],
        "summary": "Context places",
        "description": "Context places for the London Mempool map: VC offices, big tech offices, universities, accelerators and coworking spaces. They are landmarks, not ranked companies, and they are not part of the company dataset. Each address links to a page that shows it. Also available as the list_places MCP tool.",
        "responses": {
          "200": {
            "description": "Every context place.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "name",
                    "total",
                    "types",
                    "updated",
                    "license",
                    "attribution",
                    "source",
                    "data"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "total": {
                      "type": "integer"
                    },
                    "types": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Count"
                      },
                      "description": "Places per type."
                    },
                    "updated": {
                      "type": "string",
                      "format": "date",
                      "description": "Latest source check."
                    },
                    "license": {
                      "type": "string",
                      "description": "Usage terms. Attribution to London Mempool is required."
                    },
                    "attribution": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri",
                      "description": "How places are chosen and checked."
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Place"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/investors.json": {
      "get": {
        "operationId": "getInvestors",
        "tags": [
          "dataset"
        ],
        "summary": "Investors",
        "description": "Every institutional investor named on a fetched source for a company in the dataset, most companies first. Counts are a floor, not a full portfolio. Also available as the list_investors MCP tool.",
        "responses": {
          "200": {
            "description": "Every investor.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "name",
                    "description",
                    "total",
                    "ranked",
                    "rank_min",
                    "updated",
                    "license",
                    "attribution",
                    "source",
                    "data"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "total": {
                      "type": "integer",
                      "description": "Investors in data."
                    },
                    "ranked": {
                      "type": "integer",
                      "description": "Investors with at least rank_min companies."
                    },
                    "rank_min": {
                      "type": "integer",
                      "description": "Companies needed to be ranked and get a page."
                    },
                    "updated": {
                      "type": "string",
                      "format": "date",
                      "description": "Latest verification date in the dataset."
                    },
                    "license": {
                      "type": "string",
                      "description": "Usage terms. Attribution to London Mempool is required."
                    },
                    "source": {
                      "type": "string",
                      "format": "uri",
                      "description": "Canonical source of the data."
                    },
                    "attribution": {
                      "type": "string"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Investor"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/changes.json": {
      "get": {
        "operationId": "getChanges",
        "tags": [
          "dataset"
        ],
        "summary": "Changelog",
        "description": "Every change to the dataset, one entry per day, newest first: companies added and removed, and changes to tier, sector, total_funding, last_round, employees, london_address, postcode and description. The same log is at /changes (HTML), /feed.xml (RSS) and the list_changes MCP tool, which can filter by date.",
        "responses": {
          "200": {
            "description": "The changelog.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "name",
                    "updated",
                    "total_companies",
                    "license",
                    "attribution",
                    "source",
                    "data"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "updated": {
                      "type": "string",
                      "format": "date",
                      "description": "Day of the most recent change."
                    },
                    "total_companies": {
                      "type": "integer",
                      "description": "Companies in the dataset now."
                    },
                    "license": {
                      "type": "string",
                      "description": "Usage terms. Attribution to London Mempool is required."
                    },
                    "attribution": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri",
                      "description": "Canonical source of the data."
                    },
                    "feed": {
                      "type": "string",
                      "format": "uri",
                      "description": "RSS feed of the same log."
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ChangeEntry"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/feed.xml": {
      "get": {
        "operationId": "getChangesFeed",
        "tags": [
          "dataset"
        ],
        "summary": "Changelog as RSS",
        "description": "RSS 2.0 feed of the changelog. One item per day.",
        "responses": {
          "200": {
            "description": "RSS feed.",
            "content": {
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/london-mempool.csv": {
      "get": {
        "operationId": "getDatasetCsv",
        "tags": [
          "dataset"
        ],
        "summary": "Full dataset as CSV",
        "description": "Every company as CSV with a header row. Includes a companies_house_url column.",
        "responses": {
          "200": {
            "description": "CSV file.",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Company": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "website",
          "sector",
          "sector_secondary",
          "subsector",
          "tier",
          "description",
          "founded",
          "ch_number",
          "ch_name",
          "ch_status",
          "london_address",
          "address_type",
          "postcode",
          "borough",
          "lat",
          "lng",
          "address_source",
          "total_funding",
          "total_funding_usd",
          "last_round",
          "last_round_month",
          "last_round_stage",
          "last_round_kind",
          "last_round_amount",
          "funding_source",
          "employees",
          "growth_signal",
          "growth_source",
          "linkedin",
          "x_handle",
          "verified_on",
          "visa_sponsor",
          "visa_source",
          "visa_register_name",
          "open_roles_london",
          "careers_url",
          "roles_checked_at",
          "work_model",
          "work_model_roles",
          "presence",
          "presence_source",
          "incorporated_on",
          "sic_codes",
          "nearest_station",
          "station_distance_m",
          "investors",
          "github_org",
          "github_source",
          "accelerators",
          "cohorts",
          "ecosystems",
          "ch_employees",
          "area",
          "area_name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Stable URL-safe slug. Use it with /api/v1/companies/{id} or the get_company MCP tool.",
            "pattern": "^[a-z0-9-]+$",
            "examples": [
              "monzo"
            ]
          },
          "name": {
            "type": "string",
            "description": "Trading name."
          },
          "website": {
            "type": "string",
            "description": "Official website URL.",
            "format": "uri"
          },
          "sector": {
            "type": "string",
            "description": "Primary sector. One of: AI, Fintech, Quantum, Crypto, Defence, Deeptech, Health, Climate, Other. Map pins, stats and sector totals use this field only.",
            "enum": [
              "AI",
              "Fintech",
              "Quantum",
              "Crypto",
              "Defence",
              "Deeptech",
              "Health",
              "Climate",
              "Other"
            ]
          },
          "sector_secondary": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "AI",
              "Fintech",
              "Quantum",
              "Crypto",
              "Defence",
              "Deeptech",
              "Health",
              "Climate",
              null
            ],
            "description": "A second sector the company clearly also belongs to, e.g. Health for an AI drug discovery lab, or null (most companies). Never equal to sector and never Other. Hand-assigned from the company's description. The sector filter matches either field unless primary_only=true."
          },
          "subsector": {
            "type": "string",
            "description": "Free-text niche within the sector, e.g. Payments or Model lab."
          },
          "tier": {
            "type": "string",
            "description": "Stage. well_known = a household name in tech, or valued at $1B or more, or 500+ staff. fast_growing = raised $20M or more in equity in the last 24 months, or grew 2x (revenue or headcount) in 2 years. up_and_coming = early stage, with real traction (customers, revenue or a product in use) or backing from top investors.",
            "enum": [
              "well_known",
              "fast_growing",
              "up_and_coming"
            ]
          },
          "description": {
            "type": "string",
            "description": "One or two plain sentences on what the company does."
          },
          "founded": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Year founded, or null if not verified."
          },
          "ch_number": {
            "type": "string",
            "description": "UK Companies House company number. Empty if not matched."
          },
          "ch_name": {
            "type": "string",
            "description": "Registered legal name on Companies House."
          },
          "ch_status": {
            "type": "string",
            "description": "Companies House status, e.g. active."
          },
          "london_address": {
            "type": "string",
            "description": "London office address."
          },
          "address_type": {
            "type": "string",
            "enum": [
              "operating",
              "registered",
              ""
            ],
            "description": "operating = where the team works; registered = only the Companies House registered office could be verified. Empty if not recorded."
          },
          "postcode": {
            "type": "string",
            "description": "Postcode of the London office."
          },
          "borough": {
            "type": "string",
            "description": "London borough of the office (from ONS data via postcodes.io)."
          },
          "lat": {
            "type": "number",
            "description": "Latitude of the office postcode (WGS84)."
          },
          "lng": {
            "type": "number",
            "description": "Longitude of the office postcode (WGS84)."
          },
          "address_source": {
            "type": "string",
            "description": "URL that backs up the London address."
          },
          "total_funding": {
            "type": "string",
            "description": "Total funding raised as reported, in the original currency, e.g. £40M."
          },
          "total_funding_usd": {
            "type": [
              "number",
              "null"
            ],
            "description": "Total funding converted to approximate US dollars, or null if unknown. Use this for filtering and sorting."
          },
          "last_round": {
            "type": "string",
            "description": "Most recent funding round as reported, as free text, e.g. Series A, $30M, Jun 2026. The last_round_* fields are read from it."
          },
          "last_round_month": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
            "examples": [
              "2026-06"
            ],
            "description": "Month of the last round as YYYY-MM, read from last_round only when it names exactly one month and year. null when it gives only a year, a quarter or two different months, or when the last thing on record is not a raise (an acquisition or a secondary share sale)."
          },
          "last_round_stage": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "Pre-seed",
              "Seed",
              "Series A",
              "Series B",
              "Series C",
              "Series D",
              "Series E",
              "Series F",
              "Series G",
              "Series H",
              "Growth",
              "IPO",
              "Grant",
              "Debt",
              "Other",
              null
            ],
            "description": "Stage of the last round, normalised from last_round: Pre-seed, Seed, Series A, Series B, Series C, Series D, Series E, Series F, Series G, Series H, Growth, IPO, Grant, Debt, Other. Series A1, A2, A+ and B-2 count as Series A and B; a round that names two stages (Seed and Series A) gets the later one; Pre-Series A counts as Seed; Growth covers growth rounds, growth equity and late stage; IPO covers listings and public offerings; Other is a raise with no named stage. null when last_round is empty or not a raise (acquired, secondary sale, bootstrapped)."
          },
          "last_round_kind": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "equity",
              "debt",
              "mixed",
              "grant",
              null
            ],
            "description": "What the last round was made of, read from last_round: debt when it names only debt (debt, facility, loan, credit), mixed when it names more than one kind (equity and debt, grant plus equity), grant for a grant alone, equity otherwise. null when the instrument is unclear (convertible note, bridge, refinancing, financing deal), for a listing status line, and when it is not a raise."
          },
          "last_round_amount": {
            "type": [
              "object",
              "null"
            ],
            "description": "Amount of the last round as {value, currency} (value in whole units, currency USD, GBP or EUR), only when last_round names exactly one exact figure. null when it names none (undisclosed), two (a currency conversion, or equity plus debt), a floor ($80M+) or an approximate figure (about $150M). Valuations are not amounts.",
            "additionalProperties": false,
            "required": [
              "value",
              "currency"
            ],
            "properties": {
              "value": {
                "type": "integer",
                "minimum": 1,
                "description": "Amount in whole units of currency, e.g. 30000000 for $30M."
              },
              "currency": {
                "type": "string",
                "enum": [
                  "USD",
                  "GBP",
                  "EUR"
                ],
                "description": "ISO 4217 code as written: $ = USD, £ = GBP, € = EUR."
              }
            }
          },
          "funding_source": {
            "type": "string",
            "description": "URL that backs up the funding figures."
          },
          "employees": {
            "type": "string",
            "description": "Headcount as reported, often a range."
          },
          "growth_signal": {
            "type": "string",
            "description": "One sourced fact that backs up the tier."
          },
          "growth_source": {
            "type": "string",
            "description": "URL that backs up the growth signal."
          },
          "linkedin": {
            "type": "string",
            "description": "LinkedIn company page URL."
          },
          "x_handle": {
            "type": "string",
            "description": "X (Twitter) handle."
          },
          "verified_on": {
            "type": "string",
            "description": "Date this record was last verified (YYYY-MM-DD).",
            "format": "date"
          },
          "visa_sponsor": {
            "type": "boolean",
            "description": "true if the company is on the UK Home Office register of licensed Worker sponsors (exact legal or London trading name match). false means no exact match was found, not that the company never sponsors."
          },
          "visa_source": {
            "type": "string",
            "description": "URL of the gov.uk register of licensed sponsors. Set only when visa_sponsor is true."
          },
          "visa_register_name": {
            "type": "string",
            "description": "Organisation name as listed on the sponsor register. Set only when visa_sponsor is true."
          },
          "open_roles_london": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "description": "Open roles in London on the company's public job board (Ashby, Greenhouse, Lever, Workable, Teamtailor or Personio), or null when no public board was found. null does not mean not hiring."
          },
          "careers_url": {
            "type": "string",
            "description": "Public job board URL. Empty when no board was found."
          },
          "roles_checked_at": {
            "type": "string",
            "description": "Date the job board was checked (YYYY-MM-DD). Empty when no board was found."
          },
          "work_model": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "onsite",
              "hybrid",
              "remote",
              "mixed",
              null
            ],
            "description": "How the company's current London job posts say people work: onsite, hybrid or remote when 80% or more of its London posts with an explicit workplace type share that type, mixed otherwise. Read only from the job board's own workplace field (Ashby, Lever, Workable, Teamtailor) or a location that literally says Hybrid, Remote or On-site (Greenhouse, Personio), never from job description text. null when fewer than 2 London posts state a type. Reflects current job posts only, not company policy. Source: careers_url, checked on roles_checked_at."
          },
          "work_model_roles": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 2,
            "description": "Number of London job posts with an explicit workplace type that work_model is based on (2 or more). null when work_model is null."
          },
          "presence": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "hq",
              "office",
              "people",
              null
            ],
            "description": "London presence. hq = main or global HQ in London; office = a London office, HQ elsewhere; people = London staff, no office. null means not yet checked."
          },
          "presence_source": {
            "type": "string",
            "description": "URL that backs up the presence value. Empty when presence is null."
          },
          "incorporated_on": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date the legal entity was incorporated (YYYY-MM-DD), read from the public Companies House register for ch_number. null when unknown or when ch_number is a UK establishment of an overseas company. Can be later than founded when the company re-registered."
          },
          "sic_codes": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^\\d{4,5}$"
            },
            "description": "SIC 2007 codes the company lists on Companies House as its nature of business, e.g. 62012. Empty array when unknown."
          },
          "nearest_station": {
            "type": "string",
            "description": "Nearest TfL rail station (Underground, Elizabeth line, DLR or Overground) to the office postcode, from TfL open data. National Rail only stations are not included."
          },
          "station_distance_m": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "description": "Straight-line (haversine) distance from the office postcode to nearest_station, in whole metres. Walking distance is longer."
          },
          "investors": {
            "type": "array",
            "description": "Institutional investors named as backing the company on a page we fetched: [{name, slug, lead, source}]. lead = the source says it led a round. Angels, grants and lenders are left out. Only what a source names is listed, so this is a floor, not a full cap table; an empty array means none were found. slug works with the investor filter and /investors/{slug}.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "name",
                "slug",
                "lead",
                "source"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Investor name, normalised."
                },
                "slug": {
                  "type": "string",
                  "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
                  "description": "Investor id for the investor filter and /investors/{slug}."
                },
                "lead": {
                  "type": "boolean",
                  "description": "true when the source says this investor led a round."
                },
                "source": {
                  "type": "string",
                  "format": "uri",
                  "pattern": "^https://",
                  "description": "Page that names this investor."
                }
              }
            }
          },
          "github_org": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Za-z0-9-]{1,39}$",
            "description": "GitHub organisation login, linked from the company's own home page and confirmed on the public GitHub API (an Organization account, or an account whose website is the company's domain). null when none was found, which does not mean the company publishes no open source. Profile URL: https://github.com/{github_org}."
          },
          "github_source": {
            "type": "string",
            "description": "URL of the company's own page that links to github_org. Empty when github_org is null."
          },
          "accelerators": {
            "type": "array",
            "description": "Accelerator programmes the company went through: [{program, batch, source}]. program is one of: Y Combinator, Antler, Founders Factory, Conception X. batch is the batch or cohort as the programme writes it (Y Combinator: W24, S21, F24 = Fall, X25 = Spring; Conception X: CX24), or null when the programme publishes none. source is the programme's own page that lists the company (for Y Combinator, its ycombinator.com/companies page). Matched by the company's website domain against each programme's public list. Programmes with no public list (Entrepreneur First, Techstars and others) are not covered, so an empty array means none of these lists names the company, not that it never did an accelerator.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "program",
                "batch",
                "source"
              ],
              "properties": {
                "program": {
                  "type": "string",
                  "enum": [
                    "Y Combinator",
                    "Antler",
                    "Founders Factory",
                    "Conception X"
                  ],
                  "description": "Accelerator programme."
                },
                "batch": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "pattern": "^([WSFX]\\d{2}|CX\\d{2})$",
                  "description": "Batch or cohort as the programme writes it (Y Combinator W24, Conception X CX24), or null when the programme publishes none."
                },
                "source": {
                  "type": "string",
                  "format": "uri",
                  "pattern": "^https://",
                  "description": "Programme page that lists the company."
                }
              }
            }
          },
          "cohorts": {
            "type": "array",
            "description": "Published recognition lists the company appears on, newest first: [{list, year, rank, source}]. list is one of: Sifted 100 UK & Ireland, Tech Nation Future Fifty, Tech Nation Upscale, Deloitte UK Technology Fast 50, LinkedIn Top Startups UK, Forbes AI 50. year is the edition year as the publisher names it. rank is the position on a ranked list (Sifted 100, Deloitte Fast 50, LinkedIn Top Startups), null on unranked lists (Tech Nation cohorts, Forbes AI 50, which Forbes lists alphabetically). source is the publisher's own list (page, PDF or Forbes' list API) that names the company. Editions read: Sifted 100 UK & Ireland (2024, 2026), Tech Nation Future Fifty (2024 to 2026), Tech Nation Upscale (2024 to 2026), Deloitte UK Technology Fast 50 (2023 to 2025), LinkedIn Top Startups UK (2023 to 2025) and Forbes AI 50 (2024 to 2026). Matched by the company's website or LinkedIn page on the list, or by its exact name plus a location on the list (or a UK-only list) with no contradicting website, LinkedIn page or founding year; uncertain matches are left out. Lists we could not fetch (FT 1000, Sunday Times 100, CB Insights AI 100, Sifted 100 UK & Ireland 2025) are not covered, so an empty array means none of these editions names the company.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "list",
                "year",
                "rank",
                "source"
              ],
              "properties": {
                "list": {
                  "type": "string",
                  "enum": [
                    "Sifted 100 UK & Ireland",
                    "Tech Nation Future Fifty",
                    "Tech Nation Upscale",
                    "Deloitte UK Technology Fast 50",
                    "LinkedIn Top Startups UK",
                    "Forbes AI 50"
                  ],
                  "description": "Recognition list."
                },
                "year": {
                  "type": "integer",
                  "minimum": 2015,
                  "maximum": 2027,
                  "description": "Edition year as the publisher names it."
                },
                "rank": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "minimum": 1,
                  "description": "Position on a ranked list, null on an unranked list."
                },
                "source": {
                  "type": "string",
                  "format": "uri",
                  "pattern": "^https://",
                  "description": "The publisher's list (page, PDF or list API) that names the company."
                }
              }
            }
          },
          "ecosystems": {
            "type": "array",
            "description": "Crypto companies only: the blockchains the product is built on or primarily supports: [{name, source}]. name is one of: Ethereum, Bitcoin, Solana, Polygon, Base, Arbitrum, Optimism, Avalanche, Cosmos, Polkadot, Stellar, XRP Ledger, Tezos, Cardano, TON, Sui, Aptos, Near, BNB Chain, Starknet, zkSync, Plasma. source is the company's own site, docs, GitHub or announcement that names the chain. Protocols deployed on many chains list only the chain the company names first or as home. Multi-asset exchanges, custodians, brokers, market makers, payment rails and analytics providers are left empty, as are companies whose own pages name no chain, so an empty array does not mean the company uses no chain. Filter with ecosystem=<slug> (e.g. ethereum, xrp-ledger).",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "name",
                "source"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "enum": [
                    "Ethereum",
                    "Bitcoin",
                    "Solana",
                    "Polygon",
                    "Base",
                    "Arbitrum",
                    "Optimism",
                    "Avalanche",
                    "Cosmos",
                    "Polkadot",
                    "Stellar",
                    "XRP Ledger",
                    "Tezos",
                    "Cardano",
                    "TON",
                    "Sui",
                    "Aptos",
                    "Near",
                    "BNB Chain",
                    "Starknet",
                    "zkSync",
                    "Plasma"
                  ],
                  "description": "Blockchain, normalised to a fixed list."
                },
                "source": {
                  "type": "string",
                  "format": "uri",
                  "pattern": "^https://",
                  "description": "The company's own page (site, docs, GitHub or announcement) that names the chain."
                }
              }
            }
          },
          "ch_employees": {
            "type": [
              "object",
              "null"
            ],
            "description": "Staff from the company's own filed accounts: {count, period_end, scope, source}. count is the average number of employees during the accounting period ending period_end, as tagged in the latest annual accounts filed on Companies House for ch_number (iXBRL accounts only; PDF-only, dormant and unclear filings are skipped). scope is company when the figure is for the registered company itself, or group when the accounts are group accounts that give only the consolidated figure (which can include staff of subsidiaries outside the UK); when both are given the company figure is used. source is the accounts document on Companies House. It is an average over a past period, so for a fast grower it is a floor, not today's headcount, and a UK subsidiary of a larger group counts only its own staff. null when no figure could be read, which says nothing about the company's size. Separate from employees, which is the reported headcount bucket.",
            "additionalProperties": false,
            "required": [
              "count",
              "period_end",
              "scope",
              "source"
            ],
            "properties": {
              "count": {
                "type": "integer",
                "minimum": 1,
                "description": "Average number of employees during the accounting period."
              },
              "period_end": {
                "type": "string",
                "format": "date",
                "description": "Last day of the accounting period the figure covers."
              },
              "scope": {
                "type": "string",
                "enum": [
                  "company",
                  "group"
                ],
                "description": "company = staff of the registered company itself; group = consolidated group figure, used only when the accounts give none for the company alone."
              },
              "source": {
                "type": "string",
                "format": "uri",
                "pattern": "^https://find-and-update\\.company-information\\.service\\.gov\\.uk/",
                "description": "The accounts document on Companies House."
              }
            }
          },
          "area": {
            "type": "string",
            "description": "Tech neighbourhood slug, derived from lat/lng with hand-drawn boundaries. One of: kings-cross, euston-regents-place, camden, shoreditch-old-street, liverpool-street-spitalfields, aldgate-whitechapel, southwark-london-bridge, holborn-bloomsbury, clerkenwell-farringdon, city-bank, canary-wharf, fitzrovia, soho-covent-garden, mayfair-st-jamess, victoria-westminster, paddington, marylebone, white-city-shepherds-bush, elsewhere. \"elsewhere\" means outside the named neighbourhoods.",
            "enum": [
              "kings-cross",
              "euston-regents-place",
              "camden",
              "shoreditch-old-street",
              "liverpool-street-spitalfields",
              "aldgate-whitechapel",
              "southwark-london-bridge",
              "holborn-bloomsbury",
              "clerkenwell-farringdon",
              "city-bank",
              "canary-wharf",
              "fitzrovia",
              "soho-covent-garden",
              "mayfair-st-jamess",
              "victoria-westminster",
              "paddington",
              "marylebone",
              "white-city-shepherds-bush",
              "elsewhere"
            ]
          },
          "area_name": {
            "type": "string",
            "description": "Display name of the neighbourhood, e.g. King's Cross."
          }
        }
      },
      "Place": {
        "type": "object",
        "description": "A context place: a landmark to read the company map against. Not a ranked company.",
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "type",
          "address",
          "postcode",
          "borough",
          "lat",
          "lng",
          "source_url",
          "verified_on"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9-]+$",
            "description": "Stable URL-safe slug."
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "vc",
              "bigtech",
              "university",
              "accelerator",
              "coworking"
            ],
            "description": "vc, bigtech, university, accelerator or coworking."
          },
          "address": {
            "type": "string",
            "description": "London street address, as shown on the source page."
          },
          "postcode": {
            "type": "string",
            "description": "London postcode. The pin comes from it (ONS data via postcodes.io)."
          },
          "borough": {
            "type": "string",
            "description": "London borough of the postcode."
          },
          "lat": {
            "type": "number"
          },
          "lng": {
            "type": "number"
          },
          "source_url": {
            "type": "string",
            "format": "uri",
            "description": "A page we fetched that shows this London address."
          },
          "ch_number": {
            "type": "string",
            "description": "UK Companies House number of the London entity. Only set when verified."
          },
          "verified_on": {
            "type": "string",
            "format": "date",
            "description": "Day the source page was last checked."
          }
        }
      },
      "Investor": {
        "type": "object",
        "description": "An investor named on a fetched source for at least one company in the dataset.",
        "additionalProperties": false,
        "required": [
          "slug",
          "name",
          "companies",
          "leads",
          "sectors",
          "company_ids",
          "rank"
        ],
        "properties": {
          "slug": {
            "type": "string",
            "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
            "description": "Investor id. Use with the investor filter."
          },
          "name": {
            "type": "string"
          },
          "companies": {
            "type": "integer",
            "minimum": 1,
            "description": "Companies on the map this investor is named as backing."
          },
          "leads": {
            "type": "integer",
            "minimum": 0,
            "description": "Of those, how many a source says it led a round in."
          },
          "sectors": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "minimum": 1
            },
            "description": "Companies per sector."
          },
          "company_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Company ids, biggest first."
          },
          "rank": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 1,
            "description": "Leaderboard rank by company count, shared on ties. null below the ranking minimum."
          }
        }
      },
      "Count": {
        "type": "object",
        "required": [
          "key",
          "label",
          "count"
        ],
        "properties": {
          "key": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "SectorCount": {
        "type": "object",
        "required": [
          "key",
          "label",
          "count",
          "also"
        ],
        "properties": {
          "key": {
            "type": "string",
            "enum": [
              "AI",
              "Fintech",
              "Quantum",
              "Crypto",
              "Defence",
              "Deeptech",
              "Health",
              "Climate",
              "Other"
            ]
          },
          "label": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "minimum": 0,
            "description": "Companies with this primary sector."
          },
          "also": {
            "type": "integer",
            "minimum": 0,
            "description": "Companies with this as sector_secondary. Not included in count."
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "invalid_parameter",
                  "not_found"
                ]
              },
              "message": {
                "type": "string"
              },
              "details": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "param",
                    "message"
                  ],
                  "properties": {
                    "param": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ChangeEntry": {
        "type": "object",
        "description": "Net changes to the dataset on one day.",
        "required": [
          "date",
          "added",
          "removed",
          "changed"
        ],
        "properties": {
          "date": {
            "type": "string",
            "format": "date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "Day of the change (YYYY-MM-DD)."
          },
          "added": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "name",
                "sector",
                "tier"
              ],
              "additionalProperties": false,
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "sector": {
                  "type": "string",
                  "enum": [
                    "AI",
                    "Fintech",
                    "Quantum",
                    "Crypto",
                    "Defence",
                    "Deeptech",
                    "Health",
                    "Climate",
                    "Other"
                  ]
                },
                "tier": {
                  "type": "string",
                  "enum": [
                    "well_known",
                    "fast_growing",
                    "up_and_coming"
                  ]
                }
              }
            }
          },
          "removed": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "name"
              ],
              "additionalProperties": false,
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              }
            }
          },
          "changed": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "name",
                "fields"
              ],
              "additionalProperties": false,
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "previous_id": {
                  "type": "string",
                  "description": "Set when the company's id (URL slug) changed that day. The old id no longer resolves."
                },
                "fields": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "field",
                      "from",
                      "to"
                    ],
                    "additionalProperties": false,
                    "properties": {
                      "field": {
                        "type": "string",
                        "enum": [
                          "tier",
                          "sector",
                          "total_funding",
                          "last_round",
                          "employees",
                          "london_address",
                          "postcode",
                          "description"
                        ]
                      },
                      "from": {
                        "type": "string",
                        "description": "Old value. Empty means it was not set."
                      },
                      "to": {
                        "type": "string",
                        "description": "New value. Empty means it was cleared."
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}