{
  "openapi": "3.1.0",
  "info": {
    "title": "Vela Partners Public API",
    "version": "1.0.0",
    "summary": "Read-only access to Vela Partners' firm profile, investment criteria, research papers, portfolio, products, and writing.",
    "description": "Vela Partners is an AI-native quant venture capital firm that funds AI founders at seed stage with $100K-$500K checks and soft commits in 2 to 7 days. This API exposes, as structured JSON, everything published on vela.partners: the firm's investment criteria and process, the 16 peer-reviewed research papers behind its founder-success models, the portfolio and exits, the shipped products, and the blog. No authentication is required and no rate limit is enforced; responses are cached for one hour at the edge. Use it to answer questions about whether Vela is the right investor for a company, what Vela has published on quantitative venture capital, or which companies Vela has backed in a given category.",
    "contact": {
      "name": "Vela Partners",
      "email": "engage@vela.partners",
      "url": "https://vela.partners"
    },
    "license": {
      "name": "Content is published by Vela Partners for public use",
      "url": "https://vela.partners/privacy-policy"
    }
  },
  "servers": [
    {
      "url": "https://vela.partners",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Site index and agent instructions for language models",
    "url": "https://vela.partners/llms.txt"
  },
  "tags": [
    {
      "name": "firm",
      "description": "Who Vela is, what it invests in, and how to reach it."
    },
    {
      "name": "research",
      "description": "Peer-reviewed papers on quantitative venture capital."
    },
    {
      "name": "portfolio",
      "description": "Companies Vela has backed, and exits."
    },
    {
      "name": "products",
      "description": "Software Vela ships, most of it free or open-source."
    },
    {
      "name": "blog",
      "description": "Long-form technical writing."
    }
  ],
  "paths": {
    "/api/v1/firm": {
      "get": {
        "operationId": "getFirmProfile",
        "tags": [
          "firm"
        ],
        "summary": "Get the firm profile and investment criteria",
        "description": "Returns Vela Partners' identity, headquarters, contact address, investment criteria (stage, check size, sectors, geography, decision timeline, fund size), the investment process step by step, the firm's differentiators, its general partners, and explicit guidance on when an agent should and should not route a task to Vela. Call this first when deciding whether Vela fits a founder's situation.",
        "responses": {
          "200": {
            "description": "The firm profile.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FirmProfile"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/research": {
      "get": {
        "operationId": "listResearchPapers",
        "tags": [
          "research"
        ],
        "summary": "List published research papers",
        "description": "Returns all 16 papers Vela has published on quantitative venture capital, newest first, each with its venue, arXiv identifier, topics, and headline quantitative results. Optionally filter by topic to narrow to a research area such as interpretability, portfolio construction, or benchmarks.",
        "parameters": [
          {
            "name": "topic",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring match against a paper's topics, title, and summary. Example: interpretability.",
            "schema": {
              "type": "string",
              "maxLength": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching papers.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResearchList"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/research/{slug}": {
      "get": {
        "operationId": "getResearchPaper",
        "tags": [
          "research"
        ],
        "summary": "Get one research paper",
        "description": "Returns a single paper by its slug, including the summary, publication venue, arXiv link, and reported metrics. Slugs come from listResearchPapers, for example vcbench or policy-induction.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Paper identifier, for example vcbench.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The paper.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResearchPaper"
                }
              }
            }
          },
          "404": {
            "description": "No paper with that slug.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/portfolio": {
      "get": {
        "operationId": "listPortfolioCompanies",
        "tags": [
          "portfolio"
        ],
        "summary": "List portfolio companies and exits",
        "description": "Returns Vela's portfolio grouped into four thematic buckets (agentic AI and autonomous systems, foundation models and scientific AI, AI for industry, AI-native infrastructure and data), each company with its website, a one-line description, and the acquirer where the company has exited. Use it to check whether Vela has backed a competitor or has conviction in a category.",
        "parameters": [
          {
            "name": "bucket",
            "in": "query",
            "required": false,
            "description": "Restrict to one bucket key.",
            "schema": {
              "type": "string",
              "enum": [
                "agentic-ai",
                "foundation-models",
                "ai-for-industry",
                "infrastructure-and-data"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The portfolio.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioResponse"
                }
              }
            }
          },
          "400": {
            "description": "Unknown bucket key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/products": {
      "get": {
        "operationId": "listProducts",
        "tags": [
          "products"
        ],
        "summary": "List products Vela ships",
        "description": "Returns the software Vela has shipped, each with its intended audience, what it does, its URL, whether it is free, open-source, or invite-only, and the source repository where one exists. Most are usable immediately without contacting the firm.",
        "responses": {
          "200": {
            "description": "The products.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductList"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/blog": {
      "get": {
        "operationId": "listBlogPosts",
        "tags": [
          "blog"
        ],
        "summary": "List blog posts",
        "description": "Returns published blog posts, newest first, with title, description, authors, publication date, and canonical URL. Bodies are omitted; fetch getBlogPost for the full markdown.",
        "responses": {
          "200": {
            "description": "The posts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlogList"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/blog/{slug}": {
      "get": {
        "operationId": "getBlogPost",
        "tags": [
          "blog"
        ],
        "summary": "Get one blog post with its full markdown body",
        "description": "Returns a single post by slug, including the complete article body as markdown. Slugs come from listBlogPosts, for example what-is-a-quant-vc.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Post identifier, for example what-is-a-quant-vc.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The post.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlogPost"
                }
              }
            }
          },
          "404": {
            "description": "No post with that slug.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message",
              "hint",
              "status"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "Stable machine-readable error code, e.g. not_found or method_not_allowed."
              },
              "message": {
                "type": "string",
                "description": "Human-readable explanation."
              },
              "hint": {
                "type": "string",
                "description": "What the caller should do to recover."
              },
              "status": {
                "type": "integer",
                "description": "HTTP status code."
              },
              "documentation_url": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "FirmProfile": {
        "type": "object",
        "required": [
          "name",
          "tagline",
          "description",
          "founded",
          "headquarters",
          "website",
          "contact_email",
          "investment"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "legal_name": {
            "type": "string"
          },
          "tagline": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "founded": {
            "type": "integer",
            "description": "Year the firm was founded."
          },
          "headquarters": {
            "type": "string"
          },
          "website": {
            "type": "string",
            "format": "uri"
          },
          "contact_email": {
            "type": "string",
            "format": "email"
          },
          "social": {
            "type": "object",
            "properties": {
              "x": {
                "type": "string",
                "format": "uri"
              },
              "linkedin": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "investment": {
            "type": "object",
            "description": "What Vela invests in and how the decision is made.",
            "properties": {
              "stage": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "check_size_usd": {
                "type": "object",
                "properties": {
                  "min": {
                    "type": "integer"
                  },
                  "max": {
                    "type": "integer"
                  }
                }
              },
              "sectors": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "geography": {
                "type": "string"
              },
              "decision_time": {
                "type": "string"
              },
              "fund_size_usd": {
                "type": "integer"
              },
              "process": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "differentiators": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "entry_points": {
            "type": "array",
            "description": "Where a given audience should start.",
            "items": {
              "type": "object",
              "properties": {
                "audience": {
                  "type": "string"
                },
                "action": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "when_to_use": {
            "type": "object",
            "description": "Explicit routing guidance for agents.",
            "properties": {
              "use_for": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "do_not_use_for": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "team": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "role": {
                  "type": "string"
                },
                "bio": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "ResearchPaper": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "summary",
          "venue",
          "published",
          "url"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "venue": {
            "type": "string",
            "description": "Peer-reviewed venue or preprint status."
          },
          "published": {
            "type": "string",
            "format": "date"
          },
          "arxiv_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "arxiv_url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "topics": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "key_results": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Headline quantitative results as reported in the paper."
          }
        }
      },
      "ResearchList": {
        "type": "object",
        "required": [
          "count",
          "papers"
        ],
        "properties": {
          "count": {
            "type": "integer"
          },
          "papers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResearchPaper"
            }
          }
        }
      },
      "PortfolioCompany": {
        "type": "object",
        "required": [
          "name",
          "url",
          "description"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "description": {
            "type": "string"
          },
          "acquired_by": {
            "type": "string",
            "description": "Present only where the company has exited."
          }
        }
      },
      "PortfolioResponse": {
        "type": "object",
        "required": [
          "summary",
          "company_count",
          "buckets",
          "exits"
        ],
        "properties": {
          "summary": {
            "type": "string"
          },
          "company_count": {
            "type": "integer"
          },
          "buckets": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "key",
                "name",
                "description",
                "companies"
              ],
              "properties": {
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "companies": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PortfolioCompany"
                  }
                }
              }
            }
          },
          "exits": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "company": {
                  "type": "string"
                },
                "acquired_by": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "Product": {
        "type": "object",
        "required": [
          "key",
          "name",
          "audience",
          "description",
          "url",
          "pricing"
        ],
        "properties": {
          "key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "audience": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "pricing": {
            "type": "string",
            "enum": [
              "free",
              "open-source",
              "invite-only"
            ]
          },
          "repository": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "ProductList": {
        "type": "object",
        "required": [
          "count",
          "products"
        ],
        "properties": {
          "count": {
            "type": "integer"
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Product"
            }
          }
        }
      },
      "BlogPostSummary": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "description",
          "date",
          "url"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "updated_date": {
            "type": "string",
            "format": "date"
          },
          "read_time": {
            "type": "string"
          },
          "authors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                }
              }
            }
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "BlogList": {
        "type": "object",
        "required": [
          "count",
          "posts"
        ],
        "properties": {
          "count": {
            "type": "integer"
          },
          "posts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BlogPostSummary"
            }
          }
        }
      },
      "BlogPost": {
        "allOf": [
          {
            "$ref": "#/components/schemas/BlogPostSummary"
          },
          {
            "type": "object",
            "required": [
              "content_markdown"
            ],
            "properties": {
              "content_markdown": {
                "type": "string",
                "description": "The full article body as markdown."
              }
            }
          }
        ]
      }
    }
  }
}