REST API and MCP server for developers
Call our tools from your code, or connect them to an AI assistant such as Claude, ChatGPT or Cursor. Requests are processed in memory and not stored.
Free trial limits: read this first
| What you get | |
|---|---|
| No key | Compute endpoints (text, JSON, CSV, hashing, dates, math, encoding, Korean tools and more): free under fair use, rate limited per IP. File endpoints (PDF merge, split, rotate, watermark, metadata, extract, HTML or Markdown to PDF, PDF tables and text layout): 20 calls per day per IP. AI endpoints (translate, summarize, OCR): 10 calls per day per IP. Network endpoints (fetch a URL, DNS, WHOIS, SSL and similar): need a key. |
| Free key email only, no card | 1,000 credits per month, plus 20 file calls and 10 AI calls per day that cost nothing, counted per key. Credits per call: network 20, file call beyond the daily allowance 60, AI translate or summarize 50, AI OCR 100, AI quality "high" 150, AI with your own Claude or ChatGPT key 5. Compute endpoints use no credits. |
| When a limit runs out | No key: HTTP 429 with a Retry-After header. The daily count resets at 00:00 UTC.With a key: HTTP 402 when this month's credits are used up. They reset at the start of the next month (UTC). The JSON error says what happened and what you can do next. |
| Paid plans | Dev ($9 per month, 100,000 credits per month) and Business ($49 per month, 500,000 credits per month), billed monthly until you cancel, and one-time credit packs from $5. Payments are processed by Dodo Payments, our Merchant of Record. Checkout opens once Dodo Payments finishes reviewing our account; until then nothing is charged. Prices: API pricing. Manage or cancel a plan in the customer portal. Refunds: refund and cancellation policy. |
Details: API pricing · Terms, section 4. AI clients that share an IP address can use up the anonymous daily limit sooner; a free key avoids that.
Start in one minute
A compute endpoint, no key needed:
curl -s -X POST https://toolsthatdontupload.com/api/uuid -H "Content-Type: application/json" -d '{}'
A file endpoint. The response headers show how many anonymous calls are left today:
curl -i -X POST https://toolsthatdontupload.com/api/pdf-metadata -F "file=@document.pdf" # RateLimit-Limit: 20 # RateLimit-Remaining: 19
A network endpoint with a free key (get one with your email):
curl -s -X POST https://toolsthatdontupload.com/api/dns-lookup \
-H "Content-Type: application/json" -H "X-API-Key: ttdu_free_..." \
-d '{"domain":"example.com"}'
Connect the MCP server
Endpoint (Streamable HTTP): https://toolsthatdontupload.com/mcp. Three tools (search_tools, run_tool, list_categories) reach the whole catalog. MCP calls count against the same limits. Setup for Claude, Claude Code, Cursor, VS Code and ChatGPT: MCP setup. An offline bundle for Claude Desktop with 20 tools makes no network requests.
Response headers
| Header | When | Meaning |
|---|---|---|
RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset (also sent as X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset) | File and AI calls without a key | Daily anonymous allowance, what is left, and seconds until it resets |
X-Free-Daily-Limit, X-Free-Daily-Remaining | File and AI calls with a key, inside the daily allowance | Free calls left today for this key |
X-Credits-Used, X-Credits-Limit, X-Credits-Cost, X-Credits-Remaining | Calls with a key that use credits | Credits used this month, monthly credits, cost of this call, monthly credits left |
Retry-After | 429 | Seconds until the daily count resets |
X-Egress | Every API response | External hosts contacted for this call ("none" for most tools) |
Errors
| Status | Meaning | What to do |
|---|---|---|
| 400 | Input is missing or invalid (for example not valid JSON, or a file endpoint called without multipart/form-data) | Check the request against openapi.json |
| 401 | A key is required (network tools, AI quality "high") or the key is invalid | Get a free key and send it in X-API-Key |
| 402 | This month's credits are used up | Wait for the monthly reset, or add a plan or credit pack on API pricing once checkout is open. Email us if you need more now |
| 404 | Unknown or withdrawn endpoint | See the current list in openapi.json |
| 405 | Method not allowed, for example GET on an endpoint that needs POST | Send input as a POST body |
| 413 | Request body too large (JSON up to 2 MiB, file uploads up to 15 MiB) | Send a smaller file |
| 422 | The file cannot be processed, for example an encrypted or damaged PDF | Remove the password or use another file |
| 429 | Anonymous daily limit reached | Wait until 00:00 UTC (see Retry-After) or use a free key |
401, 402 and 429 responses keep their usual fields and add developers_url plus a Link: <https://toolsthatdontupload.com/developers/#limits>; rel="help" header. 402 and 429 also include next_steps (English), next_steps_ko (Korean) and paid_plans. All of these headers can be read from browser JavaScript (CORS exposed).
Docs and machine-readable files
| File | What it is |
|---|---|
| openapi.json | OpenAPI 3 spec of all REST endpoints |
| llms.txt | Short summary for AI systems |
| llms-full.txt | Full endpoint list |
| catalog.json | Tool catalog with counts and tiers |
| mcp.json | MCP server discovery |
| ai-plugin.json | ChatGPT Actions manifest |
| rag-full.txt | Combined RAG text |
| /api/health | Status and counts (JSON) |
Where your data goes
| Tier | Where it runs |
|---|---|
| Green | Browser tools: in your browser, files are not uploaded |
| Yellow | Most API calls: Cloudflare Workers memory, request bodies not stored or logged by us |
| Orange | Network tools: our edge contacts the URL or domain you give, key required |
| Blue | AI tools: input is sent to Cloudflare Workers AI (or to Anthropic or OpenAI with your own key) |
More: Privacy Policy · Transparency · Status. Evaluating this for a company? See For business.