Home › Blog

The pricing page says 1,000 credits a month. My first file API call used zero.

· 2 min read · apipricingtransparency

I built the pricing page. I wrote the words "1,000 credits per month." And then today, testing the file API for this post, my first real call came back with X-Credits-Cost: 0. I stared at that header for a solid ten seconds assuming I had broken something.

I had not broken anything. I had just forgotten my own docs.

The test

Our site is called Tools That Don't Upload because the browser tools never send your file anywhere. The file API is the opposite on purpose: it is a server endpoint, so the file has to leave your machine for the server to process it. That tradeoff is the whole point of the API existing. So I generated two throwaway one-page PDFs with Playwright, grabbed a fresh free API key, and called POST /api/pdf-merge with both files attached.

Response: 200, an 8,357-byte merged PDF, and a stack of headers I actually read this time instead of skimming:

The API key page showing Free Key (1,000 credits/month) after a key was just created
▲ The free key I generated for this test. 1,000 credits/month is the headline number on this page.
x-credits-cost: 0
x-free-daily-limit: 20
x-free-daily-remaining: 19
x-egress: none

Why the cost was zero

Turns out file calls have their own separate bucket. From our own docs, word for word: "1,000 credits per month, plus 20 file calls and 10 AI calls per day that cost nothing, counted per key." My merge call landed inside that 20-a-day allowance, so it never touched the monthly 1,000. Only once I burn through 20 file calls in a day does the 61st-ish call (file calls beyond the daily allowance cost 60 credits each) start drawing down the pool everyone sees on the pricing page.

I called the usage endpoint right after to make sure I wasn't misreading a cached header:

curl -H "X-API-Key: ttdu_free_..." \
  https://toolsthatdontupload.com/api/keys/usage

Credits used this month: 0. The daily counter, separately, had ticked down to 19 remaining.

The other header I had to look up

X-Egress: none is not about whether your file reached our server, it already did, that is what the file API is for. It means our server didn't hand the file to any third-party host while processing it. No AI vendor, no external storage, nothing outside our own infrastructure. I had to re-read the docs table to get that distinction right; "egress" is doing more specific work there than the plain-English reading suggests.

Why this matters if you're building against the API

If you're testing file endpoints in development, you can burn through a lot of calls without seeing your monthly credits move, which is good for prototyping but easy to misread as "this endpoint is free forever." It's free for 20 calls a day, per key. Past that, it's 60 credits per call. I'm writing this down publicly mostly so I stop re-explaining it to myself next time I forget.

Zero network requests leave your browser when you use the Merge PDF browser tool. The file API is a different, deliberate tradeoff: your file reaches our server, nothing else does, and the first 20 calls a day don't cost you anything.


Related: why our tool pages carry no ads and two ways to check a tool doesn't phone home.

Every browser tool on this site works the same way: your file stays on your device. Browse all 98 tools or connect the MCP server.

More from the blog