NewThe API is live — check files from your code

File recovery, on the record

Your file isn’t dead.
It’s just badly zipped.

Every .xlsx, .docx and .pptx is really a ZIP full of XML, and old .xls, .doc and .ppt files work too. Drop one here and we’ll open it up, check every part against the official ECMA-376 schema, and show you exactly what broke — including the schema faults that AI-generated files trip over and plain XML checks never catch.

A tearful cat beside a laptop showing Word's “We found a problem with some content” dialog
“We found a problem with some content.” You and me both. That message usually means one broken part — often just a few characters.

Drop the evidence here

.xlsx.docx.pptx.xls.doc.ppt— or click to browse

No broken file handy? Borrow one of ours:

Tested on files we didn't write

Recovers more than Office's own repair.

384 damaged Word, Excel and PowerPoint files, new and pre-2007, given to Microsoft Office's "recover the contents" prompt, to LibreOffice and to us.

Content recovered
81%
Office's own repair: 53%. LibreOffice: 53%.
Files that open
84%
Office's own repair: 65%. Old .xls, .doc and .ppt come back as modern files.
False alarms
0
On 5,342 real workbooks Excel opens. Good files come back byte for byte.

On 234 files broken in the wild, 77% open after our repair, to 47% after Office's.

See the full benchmark
For developers and AI agents

The same checks, one API call away

If an LLM, a script or a report builder writes your Office files, check them before a customer opens one. Send the file; get back a verdict, whether Office will open it, and exactly what a repair would change.
  • One call, one verdictok, tolerated, needs_repair, broken — plus whether Office opens it.
  • Repair in the same breath/v1/repair returns the fixed file, or the same bytes if nothing was wrong.
  • No false alarmsZero on 5,342 real workbooks Excel opens. Built for automated gates.
  • Nothing keptFiles are processed in memory and never stored or logged.
Get a free API key Read the quickstart500 requests a month free · no card
curl https://api.ihatecorruptfiles.xyz/v1/check \
  -H "Authorization: Bearer $IHCF_API_KEY" \
  -F file=@report.xlsx
Response · 200
{
  "request_id": "5f0e7c1a-6f42-4f3c-9f0b-2a1d8c7e4b90",
  "format": "xlsx",
  "bytes": 5281,
  "verdict": "needs_repair",
  "opens_in_office": true,
  "repairable": true,
  "repair_level": "SEMANTICS",
  "findings": [],
  "actions": [
    {
      "stage": "semantics",
      "code": "Sem_NumberStoredAsText",
      "fix": "convert-text-to-number",
      "description": "1 cell(s) held a number typed as text…: C2.",
      "part": "xl/worksheets/sheet1.xml",
      "location": null,
      "advisory": false
    }
  ],
  "reason": null,
  "engine_version": "2.0.0"
}
How it works

How a repair runs

Each stage runs only if the one before it wasn't enough.
  1. 01Container

    Rebuild a package whose ZIP directory is damaged

  2. 02XML

    Close unbalanced tags and escape stray entities

  3. 03Package

    Repair relationships and content types

  4. 04Schema

    Element order, attribute values and references

  5. 05Gate

    Withhold the file unless the Open XML SDK accepts it