Quickstart
Get a free API key and run your first conversion in under five minutes.
1. Get a free API key #
The free developer tier includes 25 conversions/month shared across REST and authenticated MCP, a 25 MB file cap, and 10 requests/minute — no credit card required. Requesting a key sends an email-verification link.
curl -X POST https://changethisfile.com/v1/keys/free \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com"}'
import httpx
r = httpx.post(
"https://changethisfile.com/v1/keys/free",
json={"email": "you@example.com"},
)
print(r.json()["message"])
const r = await fetch('https://changethisfile.com/v1/keys/free', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: 'you@example.com' }),
});
console.log((await r.json()).message);
The response confirms that verification is required:
{
"ok": true,
"verification_required": true,
"monthly_limit": 25,
"message": "Check your email to verify ownership."
}Follow the magic link. The dashboard signs you in and reveals the first API key through a short-lived, account-bound reference.
2. Convert your first file #
One POST. The source format is auto-detected from the filename, so target is the only field most callers ever need.
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_...your_key_here..." \
-F "file=@photo.png" \
-F "target=jpg" \
--output photo.jpg
import requests
with open("photo.png", "rb") as f:
r = requests.post(
"https://changethisfile.com/v1/convert",
headers={"Authorization": "Bearer ctf_sk_...your_key_here..."},
files={"file": f},
data={"target": "jpg"},
)
with open("photo.jpg", "wb") as out:
out.write(r.content)
import { readFileSync, writeFileSync } from 'node:fs';
const form = new FormData();
form.append('file', new Blob([readFileSync('photo.png')]), 'photo.png');
form.append('target', 'jpg');
const r = await fetch('https://changethisfile.com/v1/convert', {
method: 'POST',
headers: { Authorization: 'Bearer ctf_sk_...your_key_here...' },
body: form,
});
writeFileSync('photo.jpg', Buffer.from(await r.arrayBuffer()));
3. Inspect rate limits & quota #
Every response includes the standard rate-limit headers and your remaining monthly quota is one GET /v1/usage away.
curl https://changethisfile.com/v1/usage \
-H "Authorization: Bearer ctf_sk_..."
What's next? #
Queue large conversions and get a signed POST when they finish.
Make conversions safe to retry without duplicating charges.
Every error code, what triggers it, and how to recover.
Every enumerated source→target combination across 1,000+ supported routes.