The problem
Somewhere right now, an engineer is discovering their retry logic doesn't work — at 3:47am, on a bridge call, reading a postmortem that will later say contributing factor: untested failure paths. It always says that. It has always said that. Open any postmortem ever published and play bingo: "retry storm", "no timeout configured", "assumed the header was accurate", "the health check reported green". Full house by paragraph three.
The reason is structural, not personal: you can't test failure against systems you don't control. You can't ask Stripe to 429 you on schedule, can't ask Cloudflare to bleed memory on Tuesdays, can't ask the O2 network to expire its certificates when your test suite is ready. So nobody tests it, and the first time your error handling runs is the first time it matters, which is also — statistically — the last time it runs correctly.
The thing
FaultyData is a failure signature registry — a museum of everything that has ever fucked an API, each exhibit live and load-bearing for your test suite. Every specimen is a documented, versioned, replayable description of a real failure: the status codes, the timing profile, the corrupted bytes, the lies in the headers.
Not a chaos monkey — a curated one. The difference is the catalog: each specimen has a citation to the real postmortem where one exists, an anatomy explaining what happened and why it ruined someone's week, and a signature precise enough to replay deterministically. Chaos tools give you random suffering. We give you documented suffering, cross-referenced and graded.
Standing on the shoulders of pwnage
This owes an obvious debt to Have I Been Pwned, which proved the model a decade ago: the corpus is the product, the lookup is free, and the API pays for itself because automation has a budget and curiosity doesn't. Troy Hunt built a canonical registry where the moat isn't code — it's a decade of accumulated, attributed, searchable catastrophe. We took notes.
What we stole: free for humans, keys for robots, the catalog
itself downloadable (/api/specimens dumps the whole thing — the
Pwned Passwords move, goodwill as strategy). What we added: HIBP is a
lookup — you search a record. FaultyData is a replay — you don't
read about the failure, you point your client at it and watch what your
code does. Plus report cards, badges, and an MCP server so your AI tooling
can attend the exhibit without you.
The other lesson from HIBP: be boringly trustworthy. Specimens cite their postmortems. Modeled signatures are labeled as models. We don't claim a vendor's outage was worse or better than the record says — the record is usually funny enough on its own.
The deal
The catalog is open because catalogs are meant to be browsed — the same reason Have I Been Pwned lets you check your email for free. The specimens, anatomies, API, and report cards are free for humans at 60 requests a minute, which is enough for everything except industrial scale. If you're a CI pipeline, a fuzzer, or an AI agent running batteries all day, there's a key for that — robots pay, people browse.
The report cards are the other half: run your client against the battery, get a grade, get a badge for your README. Error handling that was actually tested at least once, which — and we cannot stress this enough — puts you ahead of most of the industry.
The rules
Documented, not invented
Real-world specimens cite the public postmortem. Modeled signatures are labeled as models, not presented as vendor fact.
Honest about the dishonesty
Replay endpoints carry X-Fault-Specimen so nobody mistakes an exhibit for an actual incident. The lies are labeled.
The catalog is the product
The code is twenty percent of the work. The other eighty is curation: signatures precise enough to replay, stories worth reading.
The goat
People ask about the goat. Three reasons. One: they're cute — undeniable, and this industry could use more cute. Two: they'll eat any old shit — literally; a goat will consume garbage, cardboard, and things that were never food, which is also a perfect description of your average HTTP client fed a truncated JSON body. Three: GOAT — Greatest Of All Time — and this is, unapologetically, a museum of the greatest fuck-ups of all time. CrowdStrike sits in the main hall as reigning champion until someone ships a worse one, which they will.
Full disclosure on the goat's limitations, in the spirit of honest attribution — everything here is verifiable. Not smart: a creature whose entire defence mechanism is standing on things and shouting, and some breeds literally faint when startled (look it up, it's called myotonia and it is objectively hilarious). Loud, bizarrely charismatic, pathologically incapable of accepting blame, and somehow still standing after everything — thirty-four felony convictions' worth of refusal to accept fault, if you'll forgive the comparison to a certain president. And delicious in a curry — proven, repeatedly, by an entire subcontinent. So: cute, indiscriminate, not a genius, excellent with rice, and standing next to the greatest failures ever committed. We just put it in the footer because it's humble like that.
And the Lock, Stock reference — it's been emotional — because every postmortem ends the same way: everyone older, everyone wiser, and someone quietly buying a second region. Then all back to mine for the post-incident review — the afterparty nobody asked for, held at 3am in a bridge call that could have been a README.
In short
Your system will fail. The only choice is whether you watch it fail in production, in front of users, generating a document with your name in it — or here, where the only casualty is your ego.