{"openapi":"3.1.0","info":{"title":"Futurum Public Read API","version":"1.0.0","description":"Read-only, unauthenticated access to the published corpus: posts of every kind, pages, the analyst directory, the companies covered, and the practice-area taxonomy that ties them together. Every path below also resolves with a trailing slash. For agent tooling see the MCP server at /api/mcp and the index at /for-agents/.","license":{"name":"Published content is free to read and cite — see /robots.txt"}},"servers":[{"url":"https://trial.futurumgroup.com"}],"paths":{"/api/content/posts":{"get":{"operationId":"listPosts","summary":"List published insights posts","parameters":[{"name":"practiceArea","in":"query","required":false,"schema":{"type":"string"},"description":"Filter to posts tagged with this practice area, exact match"},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["insight","news","press-release","research-report","document","labs-tool","intelligence"]},"description":"Filter to one content kind. Omitted means every kind."},{"name":"author","in":"query","required":false,"schema":{"type":"string"},"description":"Filter to posts this person slug authored. Slugs come from /api/content/people."},{"name":"company","in":"query","required":false,"schema":{"type":"string"},"description":"Filter to posts tagged with this company slug. Slugs come from /api/content/companies."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"How many posts to return. Defaults to 20; the maximum is 100."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"Where in the filtered set to start. Page by adding `limit` to it until `offset + limit` reaches `total`."}],"responses":{"200":{"description":"A list of published posts","content":{"application/json":{"schema":{"type":"object","properties":{"posts":{"type":"array","items":{"$ref":"#/components/schemas/PostSummary"}},"total":{"type":"integer","description":"Size of the whole filtered set, not of this page."},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Invalid query parameters"}}}},"/api/content/posts/{slug}":{"get":{"operationId":"getPost","summary":"Fetch one published post by slug and kind","description":"A slug is unique only within a kind, so `kind` selects between records that share one. It defaults to `insight`.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["insight","news","press-release","research-report","document","labs-tool","intelligence"],"default":"insight"},"description":"Which kind of record this slug names"}],"responses":{"200":{"description":"The post","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostDetail"}}}},"400":{"description":"Unknown kind. The body lists the allowed values."},"404":{"description":"Not found or not published"}}}},"/api/content/pages":{"get":{"operationId":"listPages","summary":"List published pages","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Cap the number of pages returned"}],"responses":{"200":{"description":"A list of published pages","content":{"application/json":{"schema":{"type":"object","properties":{"pages":{"type":"array","items":{"$ref":"#/components/schemas/PageSummary"}},"total":{"type":"integer"}}}}}},"400":{"description":"Invalid query parameters"}}}},"/api/content/people":{"get":{"operationId":"listPeople","summary":"List the analysts and leadership team","description":"Alphabetical by name. `bioHtml` is omitted from a directory row; fetch the single-person route for the biography and their recent posts.","parameters":[{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["analyst","leadership"]},"description":"Restrict to one role. A person may hold both."},{"name":"practiceArea","in":"query","required":false,"schema":{"type":"string"},"description":"Practice-area CODE, from /api/content/practice-areas"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"How many people to return. Defaults to 100, which is also the maximum."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"Where in the filtered set to start. Page by adding `limit` to it until `offset + limit` reaches `total`."}],"responses":{"200":{"description":"A list of published profiles","content":{"application/json":{"schema":{"type":"object","properties":{"people":{"type":"array","items":{"$ref":"#/components/schemas/PersonSummary"}},"total":{"type":"integer","description":"Size of the whole filtered set, not of this page."},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Invalid query parameters"}}}},"/api/content/people/{slug}":{"get":{"operationId":"getPerson","summary":"Fetch one profile, with the biography as plain text","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonDetail"}}}},"404":{"description":"Not found or not published"}}}},"/api/content/companies":{"get":{"operationId":"listCompanies","summary":"List the companies and vendors covered, most-covered first","description":"Ordered by how many published posts are tagged to each company, then by name. Pass a slug to /api/content/posts?company= for that coverage.","parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string"},"description":"Case-insensitive substring of the company name"},{"name":"minPosts","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"Drop companies with fewer than this many published posts"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"How many companies to return. Defaults to 100, which is also the maximum."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"Where in the filtered set to start. Page by adding `limit` to it until `offset + limit` reaches `total`."}],"responses":{"200":{"description":"A list of companies with coverage counts","content":{"application/json":{"schema":{"type":"object","properties":{"companies":{"type":"array","items":{"$ref":"#/components/schemas/CompanyRow"}},"total":{"type":"integer","description":"Size of the whole filtered set, not of this page."},"limit":{"type":"integer"},"offset":{"type":"integer"}}}}}},"400":{"description":"Invalid query parameters"}}}},"/api/content/companies/{slug}":{"get":{"operationId":"getCompanyCoverage","summary":"Fetch one company with everything published about it","description":"The JSON twin of the entity page at /company/{slug}/, reading the same derived coverage: a breakdown by kind, the analysts who write about the company most, the practice areas it falls under, the other companies it is covered alongside, and the ten newest records naming it. A known company with nothing published about it returns a zeroed summary, not a 404.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The company and its coverage summary","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyDetail"}}}},"404":{"description":"No company term with this slug"}}}},"/api/content/practice-areas":{"get":{"operationId":"listPracticeAreas","summary":"The coverage taxonomy, with post and analyst counts","description":"The `code` is what every `practiceArea` filter on this API takes. It is not derivable from the URL slug: code `ai` serves /practice-areas/ai-platforms/.","responses":{"200":{"description":"Every practice area","content":{"application/json":{"schema":{"type":"object","properties":{"practiceAreas":{"type":"array","items":{"$ref":"#/components/schemas/PracticeArea"}},"total":{"type":"integer"}}}}}}}}},"/api/search":{"get":{"operationId":"search","summary":"Full-text search over published content","description":"Ranked results with a snippet showing the match in context. Owned by the search workstream; see /for-agents/ for its current shape.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1},"description":"The search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Ranked matches, best first","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/SearchResult"}},"total":{"type":"integer"}}}}}},"400":{"description":"Missing or invalid query"}}}},"/api/content/pages/{slug}":{"get":{"operationId":"getPage","summary":"Fetch one published page by slug","description":"A canvas-kind page returns the plain-text extraction of its HTML document in `body`, not the raw markup.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageDetail"}}}},"404":{"description":"Not found or not published"}}}}},"components":{"schemas":{"PostSummary":{"type":"object","properties":{"slug":{"type":"string","description":"Unique within a kind, not site-wide"},"kind":{"type":"string","enum":["insight","news","press-release","research-report","document","labs-tool","intelligence"]},"path":{"type":"string","description":"Canonical site-relative path. Unique, unlike the slug."},"contentFormat":{"type":"string","enum":["mdx","html"],"description":"Whether `body` on the detail response is MDX or HTML"},"title":{"type":"string"},"summary":{"type":"string"},"author":{"type":"string","description":"Legacy free-text byline. Prefer `authors`."},"authors":{"type":"array","items":{"type":"string"},"description":"Person slugs, resolvable at /api/content/people/{slug}"},"companies":{"type":"array","items":{"type":"string"},"description":"Company slugs this record is tagged with"},"practiceAreas":{"type":"array","items":{"type":"string"},"description":"Practice-area CODES, not slugs"},"tags":{"type":"array","items":{"type":"string"}},"publishedAt":{"type":"string"},"updatedAt":{"type":"string"},"url":{"type":"string"}}},"PostDetail":{"allOf":[{"$ref":"#/components/schemas/PostSummary"},{"type":"object","properties":{"body":{"type":"string"}}}]},"PageSummary":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"path":{"type":"string"},"kind":{"type":"string","enum":["canvas","mdx"]},"publishedAt":{"type":"string"},"updatedAt":{"type":"string"},"url":{"type":"string"}}},"PageDetail":{"allOf":[{"$ref":"#/components/schemas/PageSummary"},{"type":"object","properties":{"body":{"type":"string","description":"Plain text for a canvas page, MDX source for an mdx page"}}}]},"PersonSummary":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"jobTitle":{"type":"string"},"roles":{"type":"array","items":{"type":"string","enum":["analyst","leadership"]}},"path":{"type":"string","description":"Canonical site-relative profile path"},"url":{"type":"string"},"practiceAreas":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"}}}},"photo":{"type":"object","properties":{"url":{"type":"string"},"alt":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}},"links":{"type":"object","properties":{"linkedin":{"type":"string"},"x":{"type":"string"},"website":{"type":"string"}}},"updatedAt":{"type":"string"}}},"PersonDetail":{"allOf":[{"$ref":"#/components/schemas/PersonSummary"},{"type":"object","properties":{"bio":{"type":"string","description":"The biography as plain text, not the stored HTML"},"postCount":{"type":"integer"},"recentPosts":{"type":"array","items":{"$ref":"#/components/schemas/PostCitation"}}}}]},"CompanyRow":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"url":{"type":"string"},"posts":{"type":"integer","description":"How many published posts are tagged with this company"}}},"CompanyDetail":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"url":{"type":"string"},"website":{"type":"string","description":"The company's own site, when known"},"ticker":{"type":"string","description":"Listed equity ticker, when known"},"description":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"},"description":"Other names the same entity is known by"},"postCount":{"type":"integer","description":"Published posts tagged with this company"},"firstCoveredAt":{"type":["string","null"],"description":"Publication date of the oldest post naming the company"},"latestCoveredAt":{"type":["string","null"]},"byKind":{"type":"array","description":"Coverage per content kind, kinds with nothing omitted","items":{"type":"object","properties":{"kind":{"type":"string","enum":["insight","news","press-release","research-report","document","labs-tool","intelligence"]},"label":{"type":"string"},"count":{"type":"integer"}}}},"leadAuthors":{"type":"array","description":"Analysts credited on the coverage, most-published first. Derived from the posts, not an account assignment.","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"url":{"type":"string"},"posts":{"type":"integer"}}}},"practiceAreas":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"Practice-area CODE, not the slug"},"name":{"type":"string"},"posts":{"type":"integer"}}}},"coCovered":{"type":"array","description":"Other companies tagged on the same posts, most co-occurrences first","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"posts":{"type":"integer"}}}},"recentPosts":{"type":"array","description":"The ten newest records naming the company, newest first","items":{"allOf":[{"$ref":"#/components/schemas/PostCitation"},{"type":"object","properties":{"kindLabel":{"type":"string","description":"How one record of this kind is named, e.g. \"Research Report\""},"url":{"type":"string"}}}]}}}},"PracticeArea":{"type":"object","properties":{"code":{"type":"string","description":"What the `practiceArea` filter takes. Not the URL slug."},"name":{"type":"string"},"path":{"type":"string"},"url":{"type":"string"},"posts":{"type":"integer"},"analysts":{"type":"integer"}}},"PostCitation":{"type":"object","properties":{"kind":{"type":"string","enum":["insight","news","press-release","research-report","document","labs-tool","intelligence"]},"title":{"type":"string"},"path":{"type":"string"},"publishedAt":{"type":"string"}}},"SearchResult":{"type":"object","properties":{"path":{"type":"string"},"kind":{"type":"string","enum":["insight","news","press-release","research-report","document","labs-tool","intelligence"]},"title":{"type":"string"},"summary":{"type":"string"},"snippet":{"type":"string","description":"The matching passage, with surrounding context"},"publishedAt":{"type":"string"},"score":{"type":"number"}}}}},"x-mcp-server":"https://trial.futurumgroup.com/api/mcp","x-llms-txt":"https://trial.futurumgroup.com/llms.txt"}