Quickstart
Three 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"
}'③ 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
Two tiers, plus unauthenticated access for detect only:
- No account —
detectmode only (100 req/hour). Strip modes require a free account. - Free — sign in at erased.ink/en/sign-in with Google or an email magic link. Unlocks all strip modes: 10 light/day (visible, metadata) and 3 heavy/day (invisible, all). Detect raises to 500/hour.
- Pro — $9/month subscription unlocks monthly quotas (5000 light + 500 heavy) and issues an API key. Send it as
Authorization: Bearer uk_...on every request.