Get started

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? #

Async jobs + webhooks

Queue large conversions and get a signed POST when they finish.

Idempotency keys

Make conversions safe to retry without duplicating charges.

Error handling

Every error code, what triggers it, and how to recover.

Format catalogue

Every enumerated source→target combination across 1,000+ supported routes.