Developers

The same tools, from your code

Three HTTP calls, no SDK, no account. A credit code (0TK-…) is your API key: buy the Print 100 + API pack (or any pack) and pass the code as a bearer token. Every image is processed and deleted: 1 hour after download, 24 hours at most.

1. Create a job

curl -X POST https://airpic.app/api/jobs \
  -F "file=@photo.jpg" \
  -F "tool=upscale" \
  -F 'options={"mode":"x8","style":"sharp"}' \
  -F "lang=en"
# → {"job_id":"…","tool":"upscale"}
tooloptions (JSON)credit
upscalemode: x2 · x4 · x8 · x16 · max250 (default x4) · style: sharp · paint · faces: true (GFPGAN on each face, sharp only)x2/x4 = standard · x8/x16/max250 = large format
animescale: 2 · 4standard
remove-bgbg: transparent · white · black · #rrggbbstandard
compressformat: jpeg · webp · avif · png · quality: 30-95 · target_kb · max_side (px) · strip: true (drop EXIF, keep ICC)standard
colorizevariant: natural · vivid · strength: 0.25-1standard
denoisestrength: 0.25-1standard
unblurvariant: motion · defocus · strength: 0.25-1standard
restorefaces: true · colorize: false · scale: 1 · 2standard
transcribelanguage: ISO code or empty (auto) · translate: true adds English TXT/SRT/VTT. Input video or audio (MP4, MOV, WebM, MKV, MP3, WAV, M4A…) up to 3 h. Output: ZIP with TXT, SRT, VTT, JSON; preview = the TXTvideo
video-docmode: both · summary · transcript (default both) · length: short · medium · long · doc_format: docx · pdf · md · doc_lang: ISO code or empty (same as the audio) · language. Input video or audio up to 3 h. Output: one file (DOCX, PDF or Markdown) with title, summary, key points, timestamped chapters and optional transcript; preview = the Markdown; output.title, output.chapters, output.wordsvideo
shortsclips: 1-5 · target_len: 15-60 s · captions, title: true · language. Input video up to 2 h. Output: ZIP with MP4 1080×1920 + SRT per clip and shorts.json; preview = first clip (MP4 540×960); output.clips lists titles and timecodesvideo
erasesecond form field mask: PNG the size of the image, painted pixels opaque (or white) over transparentstandard

Common to every tool except compress: format: png · jpg · webp (default: PNG if the result has transparency or the input was PNG, JPEG q95 for JPEG inputs and above 32 MP) and quality: 1-100. Input: JPG, PNG (16-bit too), WebP, TIFF, HEIC/HEIF, AVIF up to 100 MB; EXIF orientation is applied and the ICC profile is kept. Size limits: 32 MP (direct ×4, remove-bg, denoise, colorize, erase), 25 MP unblur, 20 MP restore, 37.5 MP for the large-format modes; output up to 600 MP.

# files over ~90 MB (video): chunked upload, then create the job with upload_id
curl -X POST https://airpic.app/api/uploads -H "content-type: application/json" -d '{"size": 734003200, "type": "video/mp4"}'
# → {"upload_id":"…","part_size":25165824}
curl -X PUT https://airpic.app/api/uploads/UPLOAD_ID/1 --data-binary @part1   # → {"part":1,"etag":"…"} (one PUT per part)
curl -X POST https://airpic.app/api/uploads/UPLOAD_ID/complete -H "content-type: application/json" -d '{"parts":[{"part":1,"etag":"…"}]}'
curl -X POST https://airpic.app/api/jobs -F "upload_id=UPLOAD_ID" -F "tool=shorts" -F 'options={"clips":3,"target_len":45}'
# erase: image + mask
curl -X POST https://airpic.app/api/jobs -F "file=@photo.jpg" -F "mask=@mask.png" -F "tool=erase"

2. Poll the status

curl https://airpic.app/api/jobs/JOB_ID
# → {"status":"queued"|"processing"}
# → {"status":"done","output":{"width":5120,"height":3840,"bytes":…,"ext":"png",
#     "url":"/api/download/JOB_ID","preview_url":"/api/preview/JOB_ID","note":"no_faces"?}}
# → {"status":"error","error":"…"}   (nothing is charged)

Poll every 1-2 s. A cold engine adds 60-90 s the first time; a large ×16 can take several minutes. The preview (≤ 1600 px) is free to fetch.

3. Download the full file

curl -L -o result.png \
  -H "Authorization: Bearer 0TK-XXXXXXXXXXXX" \
  https://airpic.app/api/download/JOB_ID

The first download of a job consumes 1 credit of the right kind (standard, large format or video) from the code; later downloads of the same job are free. Without credit you get 402 with {"need":"std"|"gf"|"vid"}. Check a balance any time:

curl https://airpic.app/api/credits/0TK-XXXXXXXXXXXX
# → {"std":0,"gf":97,"vid":10}

Limits & fair use

Processing and the preview are free; downloading the full file uses one credit from the bearer code (or the free download of the month, by IP). Pricing and packs: airpic.app/en/#precios.