For developers
Free content APIs. No key, no sign-up.
A random fact, tech fact or quote — one call, no account, and open CORS, so you can fetch it straight from the browser without a proxy in the middle.
No API key
Nothing to register for, nothing to rotate. Call it and it answers.
CORS is open
Access-Control-Allow-Origin: * —
call it from client-side JavaScript. Some paid APIs charge for this.
60 requests a minute
Per IP, across all endpoints. Ample for a widget; ask if you need more.
The endpoints
Each collection serves the same two calls. Everything is GET,
and every response is JSON.
Random facts
6,000+ items · browse them
A random one
count is optional — 1 to 50,
default 1. Out-of-range or non-numeric values are clamped rather than rejected, so a
sloppy call still gets a useful answer.
The one of the day
The same item for everyone all day, cached 24 hours — for a "fact of the day" block that should not change on refresh.
Response
{
"data": [ {"id":1181,"title":"Human bones are stronger than steel","fact":"Human bones are stronger than steel, but they are not indestructible."} ],
"meta": { "count": 1, "endpoint": "random", "cache": "…" }
}
Each item carries id, title, fact.
Tech facts
4,000+ items · browse them
A random one
count is optional — 1 to 50,
default 1. Out-of-range or non-numeric values are clamped rather than rejected, so a
sloppy call still gets a useful answer.
The one of the day
The same item for everyone all day, cached 24 hours — for a "fact of the day" block that should not change on refresh.
Response
{
"data": [ {"id":591,"title":"Command-line tools for sysadmins","fact":"top, htop, iotop, sar and strace are the tools most Linux admins reach for first."} ],
"meta": { "count": 1, "endpoint": "random", "cache": "…" }
}
Each item carries id, title, fact.
Quotes
6,000+ items · browse them
A random one
count is optional — 1 to 50,
default 1. Out-of-range or non-numeric values are clamped rather than rejected, so a
sloppy call still gets a useful answer.
The one of the day
The same item for everyone all day, cached 24 hours — for a "fact of the day" block that should not change on refresh.
Response
{
"data": [ {"id":4061,"quote":"It is safer to search in the maze than to remain in a cheeseless situation.","author":"Spencer Johnson"} ],
"meta": { "count": 1, "endpoint": "random", "cache": "…" }
}
Each item carries id, quote, author.
Things worth knowing
data is always an array on /random
Even for a single item, so you never have to branch on the shape. On
/today it is a single object, because there
is only ever one.
Nothing found answers 410, not 404
Site-wide policy. The body keeps the same envelope:
{"data": null, "errors": ["…"]}.
Attribution
Free to use, including commercially. A link back to DriveBird is appreciated but not required — we would rather you shipped the thing.
No uptime promise
These are free endpoints on a small server, offered honestly as such. Cache the response on your side and handle a failure gracefully — don't put them on a critical path.
Straight from the browser
Open CORS means this works in a plain HTML page — no server, no proxy, no key.
const r = await fetch('https://www.drivebird.com/api/quotes/random');
const { data } = await r.json();
document.body.textContent = data[0].quote + " — " + data[0].author;
Building something with this content? MeBot answers your visitors' questions on your own site.