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"}
| tool | options (JSON) | credit |
|---|---|---|
upscale | mode: 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 |
anime | scale: 2 · 4 | standard |
remove-bg | bg: transparent · white · black · #rrggbb | standard |
compress | format: jpeg · webp · avif · png · quality: 30-95 · target_kb · max_side (px) · strip: true (drop EXIF, keep ICC) | standard |
colorize | variant: natural · vivid · strength: 0.25-1 | standard |
denoise | strength: 0.25-1 | standard |
unblur | variant: motion · defocus · strength: 0.25-1 | standard |
restore | faces: true · colorize: false · scale: 1 · 2 | standard |
transcribe | language: 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 TXT | video |
video-doc | mode: 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.words | video |
shorts | clips: 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 timecodes | video |
erase | second form field mask: PNG the size of the image, painted pixels opaque (or white) over transparent | standard |
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
- 20 jobs per hour per IP. Need more? Write to us with your code and we raise it.
- Concurrent GPU workers are shared: batch politely, at most 2 jobs in flight.
- Codes are bearer tokens: keep them server-side, never in a browser or app binary.
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.