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

GET https://www.drivebird.com/api/facts/random?count=5

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

GET https://www.drivebird.com/api/facts/today

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

GET https://www.drivebird.com/api/tech-facts/random?count=5

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

GET https://www.drivebird.com/api/tech-facts/today

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

GET https://www.drivebird.com/api/quotes/random?count=5

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

GET https://www.drivebird.com/api/quotes/today

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.