Skip to content

API

Free, unauthenticated, and CORS-enabled. Every response returns his words verbatim with the work they came from, and says whether the wording has been checked against that work.

It exists because the alternative is worse. Asked what Friedman said about something, a language model will reconstruct him from memory and produce a quote that sounds right and has no source. This gives anything that can make an HTTP request a way to quote him accurately.

Endpoints

/api/v1/search?q=inflation
Find passages where he addressed a subject. Ranked, with citations.
/api/v1/topics.json
Every subject the archive holds passages on.
/api/v1/topics/{id}.json
One topic and all its passages.
/api/v1/quotes/{id}.json
One passage by id.
/api/v1/stats.json
How big the archive is and how much is verified.
/api/v1/openapi.json
The machine-readable spec for all of the above.

Try it

Request
curl "https://miltonfriedman.org/api/v1/search?q=what+did+he+say+about+tariffs"
Response
{
  "apiVersion": "v1",
  "query": "what did he say about tariffs",
  "count": 1,
  "empty": false,
  "results": [
    {
      "text": "...",
      "citation": "Interview with Milton Friedman, Playboy, 1973",
      "verification": { "status": "reported" },
      "sources": [],
      "url": "https://miltonfriedman.org/quotes/..."
    }
  ],
  "notice": [
    "Every passage is reproduced word for word from the cited source.",
    "Check the verification status of each passage.",
    "Milton Friedman died on November 16, 2006."
  ]
}

Rules for anything that uses this

These travel in a notice field on every response, because they matter more than the data does.

Limits

No key, no quota, and no rate limit today. If that gets abused, a limit goes in and this page says so. Responses are cached for an hour at the edge. If you are building something that needs guarantees, get in touch first.