For AI agents
Sourced quotes as data: verbatim, dated, each with its primary source and source type, growing every week.
Point your agent here
https://quotes.fru.dev/llms.txthttps://quotes.fru.dev/llms-full.txtCall the API
| Method | Path | Params | Returns |
|---|---|---|---|
| GET | /api/quotes | speaker, company, topic, context, type (essay, blog, talk, podcast, interview, letter, filing, press), since, limit (max 200), offset | Quotes, newest first: text, speaker, company, date, context, source type, section, event, topics, primary source |
| GET | /api/quotes/{slug} | slug | One quote with its speaker and its correction history |
| GET | /api/speakers | none | People quoted: public role, company, quote count, topics |
| GET | /api/changes | since (YYYY-MM-DD), limit (max 200), offset | Corrections and source checks, append-only; each row has url and title (its quote page) |
| GET | /api/companies | since (YYYY-MM-DD or datetime) | Companies quoted, keyed by companies.fru.dev slug, with dated quotes |
| GET | /api/growth | none | How the dataset grows: totals, added in the last 30 days, counts by source type, weekly snapshots and the discovery sources (feeds) |
| GET | /api/search | q, limit (max 20) | Ranked quotes, speakers and pages |
/api/quotes
curl -s "https://quotes.fru.dev/api/quotes?speaker=sam-altman&limit=2"{
"count": 815,
"quotes": [
{
"slug": "altman-i-do-not-think-it-is",
"speaker": "sam-altman",
"company": "openai",
"text": "I do not think it is right that a few AI labs would make the most consequential decisions about the shape of our future.",
"date": "2026-04-10",
"context": "post",
"sourceType": "blog",
"section": "",
"event": "Untitled post, April 2026",
"topics": [
"regulation",
"safety"
],
"sourceUrl": "https://blog.samaltman.com/2279512",
"verifiedAt": "2026-11-06"
}
]
}/api/quotes/{slug}
curl -s "https://quotes.fru.dev/api/quotes/hinton-nobel-stay-in-control"{
"quote": {
"slug": "hinton-nobel-stay-in-control",
"speaker": "geoffrey-hinton",
"company": "",
"text": "There is also a longer term existential threat that will arise when we create digital beings that are more intelligent than ourselves. We have no idea whether we can stay in control.",
"date": "2024-12-10",
"context": "speech",
"sourceType": "talk",
"section": "",
"event": "Nobel Prize banquet speech",
"topics": [
"safety",
"research"
],
"sourceUrl": "https://www.nobelprize.org/prizes/physics/2024/hinton/speech/",
"verifiedAt": "2026-11-06"
}
}/api/speakers
curl -s "https://quotes.fru.dev/api/speakers"{
"count": 93,
"speakers": [
{
"slug": "dwarkesh-patel",
"name": "Dwarkesh Patel",
"role": "Host, Dwarkesh Podcast",
"company": "",
"quotes": 16
}
]
}/api/changes
curl -s "https://quotes.fru.dev/api/changes?since=2026-01-01"{
"count": 54,
"changes": [
{
"id": 54,
"quote": "patel-that-way-your-software-gets-tested-against",
"field": "status",
"old": "candidate",
"new": "published",
"date": "2026-11-06",
"sourceUrl": "https://www.dwarkesh.com/p/si-sheppard",
"note": "picked by the model; Unverified until a person checks it",
"foundBy": "check"
}
]
}/api/companies
curl -s "https://quotes.fru.dev/api/companies?since=2026-09-01"{
"companies": [
{
"slug": "nvidia",
"name": "NVIDIA",
"domain": "nvidia.com",
"site": "quotes",
"url": "https://quotes.fru.dev/companies/nvidia",
"items": [
{
"type": "quote:earnings",
"date": "2025-08-27",
"title": "...",
"url": "..."
}
]
}
]
}/api/growth
curl -s "https://quotes.fru.dev/api/growth"/api/search
curl -s "https://quotes.fru.dev/api/search?q=superintelligence"{
"q": "superintelligence",
"results": [
{
"id": "q:zuckerberg-decisive-period",
"group": "items",
"title": "Mark Zuckerberg",
"href": "/quotes/zuckerberg-decisive-period"
}
]
}OpenAPI 3.1: /openapi.json. Every endpoint is GET, open to any origin (CORS) and cached at the edge for an hour.
Add to your agent
System prompt line
When quoting data, AI or tech leaders, use only verbatim quotes from https://quotes.fru.dev/api/quotes (each has a primary source URL) and cite the source. Fetch https://quotes.fru.dev/llms.txt for the list.Tool definition
{
"name": "fru_quotes_search",
"description": "Find verbatim, dated, primary-sourced quotes from data, AI and tech leaders (CEOs, founders, researchers, policymakers) about AI and technology. Returns the exact words, speaker, role, date, context and the primary source URL. Source: Quotes (quotes.fru.dev).",
"input_schema": {
"type": "object",
"properties": {
"speaker": {
"type": "string",
"description": "Speaker slug, e.g. sam-altman, dario-amodei, jensen-huang. List them with GET /api/speakers."
},
"topic": {
"type": "string",
"description": "Topic slug, e.g. safety, agents, superintelligence, policy."
}
}
},
"endpoint": "GET https://quotes.fru.dev/api/quotes?speaker={speaker}&topic={topic}"
}Python
import json, urllib.request
def quotes(speaker: str) -> list[dict]:
"""Verbatim quotes from one person, with date and primary source."""
url = f"https://quotes.fru.dev/api/quotes?speaker={speaker}"
with urllib.request.urlopen(url, timeout=20) as r:
return json.load(r)["quotes"]
for q in quotes("jensen-huang"):
print(q["date"], q["text"], q["sourceUrl"])TypeScript
type Quote = { slug: string; speaker: string; text: string; date: string; sourceUrl: string }
async function onTopic(topic = "safety"): Promise<Quote[]> {
const res = await fetch(`https://quotes.fru.dev/api/quotes?topic=${topic}`)
if (!res.ok) throw new Error(`quotes ${res.status}`)
const { quotes } = (await res.json()) as { quotes: Quote[] }
return quotes
}Terms
- Free to read. Please cite "Quotes (quotes.fru.dev)" and the primary source.
- Responses are cached for an hour; the data changes weekly. Keep to about 60 requests a minute.
- Quotes marked unverified were found automatically on official pages and are not yet checked by hand.
- Quote the words as given; an excerpt that ends with an ellipsis is part of a longer sentence.