{
  "openapi": "3.1.0",
  "info": {
    "title": "Tech.eu Funding Explorer API",
    "version": "1.0.0",
    "description": "European tech funding rounds, investors and exits — cited, EUR-normalized at the ECB reference rate on each round date, read-only.\n\nCoverage: the full dataset the site renders — every company, round, investor and exit. No sample tier, no key, no account. Reference: /developers (REST) and /mcp (MCP server).\n\nPer-IP rate limits across three windows: 120/60s (burst), 600/hour (sustained), 2000/day (fair use). Responses carry ratelimit-limit, ratelimit-remaining, ratelimit-reset and ratelimit-scope headers; exceeding a window returns HTTP 429 with retry-after, and ratelimit-scope names the window that tripped. Reads are free; for full-dataset or high-volume access contact Tech.eu.\n\nPagination: /rounds and /exits are keyset-paginated — pass the returned nextCursor as ?after=. /investors is page-based (?page=).\n\nSyncing a local copy? Use /changes rather than re-walking /rounds on a schedule: it is keyed on ingestion time, sorted oldest-first, and returns added rows plus removed-row tombstones.",
    "contact": {
      "name": "Tech.eu",
      "url": "https://tech.eu"
    }
  },
  "servers": [
    {
      "url": "https://funding.tech.eu"
    }
  ],
  "externalDocs": {
    "description": "Methodology (EUR normalization, confidence tiers, provenance)",
    "url": "https://funding.tech.eu/methodology"
  },
  "paths": {
    "/api/v1": {
      "get": {
        "operationId": "getIndex",
        "summary": "API index — endpoints, rate limits, usage notes",
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded — retry-after names the wait; ratelimit-scope names the tripped window.",
            "headers": {
              "retry-after": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/rounds": {
      "get": {
        "operationId": "listRounds",
        "summary": "Funding rounds, newest first (keyset-paginated)",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "after",
            "in": "query",
            "description": "Keyset cursor — the nextCursor of the previous page, shaped <YYYY-MM-DD>__<id>",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Earliest round date (YYYY-MM-DD, inclusive)",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "description": "Latest round date (YYYY-MM-DD, inclusive)",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "minAmount",
            "in": "query",
            "description": "Minimum round size in whole euros (filters on the same FX-audited amountEur the response reports)",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "country",
            "in": "query",
            "description": "Canonical country name (e.g. UK, Germany, Türkiye); aliases are resolved",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stage",
            "in": "query",
            "description": "Canonical stage (e.g. Seed, Series A, Series D+)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sector",
            "in": "query",
            "description": "Canonical sector (e.g. AI, Fintech, Healthtech, Software, Cleantech, Energy); matches the /sectors taxonomy. Unknown values return 400 with the valid list.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Round"
                      }
                    },
                    "nextCursor": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Pass as ?after= for the next page; null on the last page"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "appliedFilters": {
                      "type": "object",
                      "description": "The filters actually applied, normalized (e.g. country \"uk\" → \"UK\") — confirms a filter took effect rather than being silently ignored"
                    },
                    "source": {
                      "type": "string"
                    },
                    "methodology": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid cursor or parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded — retry-after names the wait; ratelimit-scope names the tripped window.",
            "headers": {
              "retry-after": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/companies/{id}": {
      "get": {
        "operationId": "getCompany",
        "summary": "Company profile — rounds, investors, exit, funding signals",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Company"
                }
              }
            }
          },
          "404": {
            "description": "Company not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded — retry-after names the wait; ratelimit-scope names the tripped window.",
            "headers": {
              "retry-after": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/investors": {
      "get": {
        "operationId": "listInvestors",
        "summary": "Investor directory, entity-resolved (page-based)",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Name search",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "description": "Investor type (e.g. Venture Capital; loose casing and aliases like \"vc\" resolve)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "deals_desc",
                "companies_desc",
                "name"
              ]
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/InvestorSummary"
                      }
                    },
                    "page": {
                      "type": "integer"
                    },
                    "totalPages": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded — retry-after names the wait; ratelimit-scope names the tripped window.",
            "headers": {
              "retry-after": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/investors/{name}": {
      "get": {
        "operationId": "getInvestor",
        "summary": "Investor profile — portfolio, biggest deals, co-investors, focus breakdowns",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "description": "URL-encoded entity-resolved name; find it via /investors?q=",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "compact",
            "in": "query",
            "description": "Lean profile: top 15 portfolio companies by €, top co-investors, no dealsByYear. Adds compact:true + portfolioTotal (the full portfolio count).",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Investor"
                }
              }
            }
          },
          "404": {
            "description": "Investor not found (the error includes a hint to search /investors?q=)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded — retry-after names the wait; ratelimit-scope names the tripped window.",
            "headers": {
              "retry-after": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/exits": {
      "get": {
        "operationId": "listExits",
        "summary": "Exits / M&A, newest first (keyset-paginated)",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "after",
            "in": "query",
            "description": "Keyset cursor — the nextCursor of the previous page",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Earliest exit date (YYYY-MM-DD, inclusive)",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "description": "Latest exit date (YYYY-MM-DD, inclusive)",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "country",
            "in": "query",
            "description": "Exited company country (not the acquirer); aliases resolved. Unknown values return 400 with a hint.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Exit"
                      }
                    },
                    "nextCursor": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "count": {
                      "type": "integer"
                    },
                    "appliedFilters": {
                      "type": "object",
                      "description": "The filters actually applied, normalized"
                    },
                    "note": {
                      "type": "string",
                      "description": "About 65% of exits have no disclosed value — valueEur is null in those cases"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid cursor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded — retry-after names the wait; ratelimit-scope names the tripped window.",
            "headers": {
              "retry-after": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/changes": {
      "get": {
        "operationId": "listChanges",
        "summary": "Incremental sync — rows added and removed since a timestamp (oldest first)",
        "description": "Keyed on ingestion time and sorted OLDEST-first, so the cursor is resumable: store the last nextCursor and start there on the next run. Use this instead of re-walking /rounds on a schedule. COVERAGE: additions and removals only. The source tables carry an ingestion timestamp but no modification timestamp, so an in-place edit to a row that already existed is NOT reported — re-read that record by id when you need its current state. Exits are unavailable here (that table has no ingestion timestamp).",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "What to sync",
            "schema": {
              "type": "string",
              "enum": [
                "rounds",
                "companies"
              ],
              "default": "rounds"
            }
          },
          {
            "name": "since",
            "in": "query",
            "required": true,
            "description": "Start of the window — a date (YYYY-MM-DD, read as UTC midnight) or an ISO-8601 timestamp",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "after",
            "in": "query",
            "description": "Keyset cursor — the nextCursor of the previous page, shaped <ISO-8601 timestamp>__<id>",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "rounds",
                        "companies"
                      ]
                    },
                    "since": {
                      "type": "string",
                      "description": "The window start actually applied, normalized to ISO-8601"
                    },
                    "data": {
                      "type": "array",
                      "description": "Rows added in the window, each with its createdAt ingestion timestamp",
                      "items": {
                        "type": "object"
                      }
                    },
                    "count": {
                      "type": "integer"
                    },
                    "removed": {
                      "type": "array",
                      "description": "Tombstones for rows deleted in the window. Returned complete on every page, not paginated.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "removedAt": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "reason": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        }
                      }
                    },
                    "removedComplete": {
                      "type": "boolean",
                      "description": "False if the tombstone list hit its cap and is truncated"
                    },
                    "nextCursor": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Pass as ?after= for the next page; null when you are caught up"
                    },
                    "coverage": {
                      "type": "string",
                      "description": "Restates the added/removed-only limit in every response"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid since, unknown type, or invalid cursor",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded — retry-after names the wait; ratelimit-scope names the tripped window.",
            "headers": {
              "retry-after": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/market-map": {
      "get": {
        "operationId": "getMarketMap",
        "summary": "Period aggregates by country, sector and stage, with provenance",
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "description": "A year (2026), quarter (2026-q1) or month (2026-01); defaults to the current year",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketMap"
                }
              }
            }
          },
          "400": {
            "description": "Unparseable period",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded — retry-after names the wait; ratelimit-scope names the tripped window.",
            "headers": {
              "retry-after": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-limit": {
                "description": "Request ceiling of the most constrained window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-remaining": {
                "description": "Requests remaining in that window",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-reset": {
                "description": "Seconds until the window resets",
                "schema": {
                  "type": "string"
                }
              },
              "ratelimit-scope": {
                "description": "Which window the headers describe (burst | hourly | daily)",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "hint": {
            "type": "string"
          }
        },
        "required": [
          "error"
        ]
      },
      "Fx": {
        "type": [
          "object",
          "null"
        ],
        "description": "ECB reference-rate conversion applied on the round date",
        "properties": {
          "rate": {
            "type": "number"
          },
          "asOf": {
            "type": "string",
            "format": "date"
          },
          "source": {
            "type": "string",
            "const": "ECB"
          }
        }
      },
      "Round": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "description": "Site-relative deal page (/deals/{id})"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "stage": {
            "type": "string",
            "description": "Canonical stage (Seed, Series A … Series D+, Other)"
          },
          "rawRoundType": {
            "type": [
              "string",
              "null"
            ]
          },
          "amountEur": {
            "type": [
              "number",
              "null"
            ],
            "description": "Whole euros — FX-audited ECB-at-date recompute, falling back to the stored value"
          },
          "amountEurStored": {
            "type": [
              "number",
              "null"
            ],
            "description": "Whole euros as stored by the source"
          },
          "amountNative": {
            "type": [
              "number",
              "null"
            ]
          },
          "currency": {
            "type": [
              "string",
              "null"
            ]
          },
          "fx": {
            "$ref": "#/components/schemas/Fx"
          },
          "company": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "country": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "city": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "founded": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "sectors": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "investors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Up to 15 named investors (generic buckets removed)"
          },
          "source": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "domain": {
                "type": "string"
              },
              "tier": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "confidence": {
            "type": "string",
            "description": "Combined confidence tier (high | medium | low | none)"
          }
        }
      },
      "Company": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "website": {
            "type": [
              "string",
              "null"
            ]
          },
          "country": {
            "type": [
              "string",
              "null"
            ]
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "founded": {
            "type": [
              "integer",
              "null"
            ]
          },
          "sectors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "totalEur": {
            "type": [
              "number",
              "null"
            ]
          },
          "roundsCount": {
            "type": "integer"
          },
          "rounds": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "date": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "stage": {
                  "type": "string"
                },
                "amountEur": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "investors": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "investors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "founders": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                }
              }
            },
            "description": "Founder names only — per-person attributes are not exposed"
          },
          "exit": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "type": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "date": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "valueEur": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "acquirors": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "acquirorHqCountry": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "signals": {
            "type": [
              "object",
              "null"
            ],
            "description": "Deterministic funding-signal estimates (absent for exited companies)"
          },
          "source": {
            "type": "string"
          },
          "methodology": {
            "type": "string"
          }
        }
      },
      "InvestorSummary": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "type": {
            "type": [
              "string",
              "null"
            ]
          },
          "deals": {
            "type": "integer"
          },
          "companies": {
            "type": "integer"
          },
          "topSector": {
            "type": [
              "string",
              "null"
            ]
          },
          "activeYears": {
            "type": "object",
            "properties": {
              "first": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "last": {
                "type": [
                  "integer",
                  "null"
                ]
              }
            }
          }
        }
      },
      "Investor": {
        "type": "object",
        "description": "Entity-resolved investor; participatedRoundEur is the combined SIZE of syndicated rounds, not solely-deployed capital.",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "types": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "deals": {
            "type": "integer"
          },
          "companies": {
            "type": "integer"
          },
          "activeYears": {
            "type": "object",
            "properties": {
              "first": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "last": {
                "type": [
                  "integer",
                  "null"
                ]
              }
            }
          },
          "participatedRoundEur": {
            "type": [
              "number",
              "null"
            ]
          },
          "sectors": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "stages": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "countries": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "dealsByYear": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "portfolio": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "company": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "country": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "rounds": {
                  "type": "integer"
                },
                "totalEur": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              }
            }
          },
          "biggestDeals": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "company": {
                  "type": "string"
                },
                "companyUrl": {
                  "type": "string"
                },
                "dealUrl": {
                  "type": "string"
                },
                "stage": {
                  "type": "string"
                },
                "amountEur": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "date": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "coInvestors": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "Exit": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "type": {
            "type": [
              "string",
              "null"
            ]
          },
          "valueEur": {
            "type": [
              "number",
              "null"
            ],
            "description": "Whole euros; null when undisclosed (~65% of exits)"
          },
          "currency": {
            "type": [
              "string",
              "null"
            ]
          },
          "acquirors": {
            "type": [
              "string",
              "null"
            ]
          },
          "acquirorHqCountry": {
            "type": [
              "string",
              "null"
            ],
            "description": "Acquirer (buyer) HQ country"
          },
          "company": {
            "type": [
              "object",
              "null"
            ],
            "description": "The exited (target) company; null when unlinked (~5% of rows)",
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "country": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Exited company country — the ?country= filter matches this"
              },
              "url": {
                "type": "string"
              }
            }
          }
        }
      },
      "MarketMap": {
        "type": "object",
        "properties": {
          "period": {
            "type": "string"
          },
          "range": {
            "type": "object",
            "properties": {
              "start": {
                "type": "string"
              },
              "endExclusive": {
                "type": "string"
              },
              "partial": {
                "type": "boolean"
              }
            }
          },
          "kpis": {
            "type": "object",
            "properties": {
              "disclosedEur": {
                "type": "number"
              },
              "rounds": {
                "type": "integer"
              },
              "companies": {
                "type": "integer"
              },
              "investors": {
                "type": "integer"
              },
              "exits": {
                "type": "integer"
              }
            }
          },
          "concentration": {
            "type": "object"
          },
          "byCountry": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "bySector": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "byStage": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "provenance": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "disclosedPct": {
                "type": "number"
              },
              "highConfidencePct": {
                "type": "number"
              },
              "ecbReconcileDeltaPct": {
                "type": "number"
              }
            }
          }
        }
      }
    }
  }
}