Quickstart
Four ways to send an image to Erased. Pick whichever fits your stack; they all converge on the same processing pipeline.
① multipart — one-call upload + process
One HTTP call, no base64 inflation. Recommended for almost every use case.
curl -X POST https://erased.ink/api/v1/jobs \
-F "image=@photo.png" \
-F "mode=visible"
# → { "id":"job_xxx", "status":"succeeded", "result_url":"https://..." }// JavaScript (browser or Node 18+)
const fd = new FormData();
fd.append("image", fileBlob, "photo.png");
fd.append("mode", "visible");
const res = await fetch("https://erased.ink/api/v1/jobs", { method: "POST", body: fd });
const { result_url } = await res.json();# Python
import requests
with open("photo.png", "rb") as f:
r = requests.post("https://erased.ink/api/v1/jobs",
files={"image": f}, data={"mode": "visible"})
print(r.json()["result_url"])② JSON + base64 — for JSON-only tools (≤1MB)
Use when your stack can only send JSON (Zapier, n8n, etc.). 1MB decoded cap.
curl -X POST https://erased.ink/api/v1/jobs \
-H 'content-type: application/json' \
-d '{
"image_base64":"iVBORw0KGgo...",
"content_type":"image/png",
"mode":"visible"
}'③ GET /api/v1/clean — URL in, image out
Single sync call where the response body is the processed image. Works in <img src="..." /> and CDN-cacheable.
<!-- Drop in directly to HTML / Markdown -->
<img src="https://erased.ink/api/v1/clean?image=https%3A%2F%2Fexample.com%2Fphoto.png&mode=visible" /># curl
curl 'https://erased.ink/api/v1/clean?image=https%3A%2F%2Fexample.com%2Fphoto.png&mode=visible' -o clean.pngAnonymous / Free only — Pro users go via POST /jobs. See API reference for limits.
④ Presigned upload — large files / batch
For files >10MB-tail or batch uploads, request a presigned R2 URL, PUT the bytes directly to R2 (bypassing the Worker), then submit the job by object_key:
# 1) Ask for a presigned PUT URL
curl -X POST https://erased.ink/api/v1/uploads \
-H 'content-type: application/json' \
-d '{"filename":"photo.png","content_type":"image/png","size":4823109}'
# → { "upload_url":"https://...", "object_key":"in/2026-05-24/job_xxx.png" }
# 2) PUT bytes directly to R2 (content-type MUST match step 1)
curl -X PUT "<upload_url>" --data-binary @photo.png -H 'content-type: image/png'
# 3) Submit the job by object_key
curl -X POST https://erased.ink/api/v1/jobs \
-H 'content-type: application/json' \
-d '{"object_key":"in/2026-05-24/job_xxx.png","mode":"visible"}'Authentication
Three tiers, in order of capability:
- Anonymous — no sign-in required. Subject to per-hour rate limits (see the API reference).
- Free — sign in at erased.ink/en/sign-in with Google or an email magic link. Higher per-hour caps.
- Pro — $9/month subscription unlocks monthly quotas and issues an API key. Send it as
Authorization: Bearer uk_...on every request.