{"name":"PhotDev Agent API","description":"Apply an analog film-inspired filter to a photo in one request.","endpoint":"https://api.phot.dev/v1/develop","method":"POST multipart/form-data","fields":{"file":"image: HEIC, JPEG, PNG, TIFF, WebP, or supported RAW. Send this or image_id, never both","image_id":"reuse an upload kept by an earlier call (X-PhotDev-Image-Id)","lut":"a 3D .cube file; LUT_3D_SIZE 2-65. Replaces film and preset_id rather than layering over them","film":"filter name or a known alias, or auto; default auto","preset_id":"exact variant id from /v1/films/{film}; overrides film","format":"jpeg or heic; default jpeg","quality":"1-100; default 92","strength":"0-1.5; default 1","lift":"0-2 EV compressed-exposure lift; default 0","vignette":"0-2 cos^4 lens falloff; default 0","adjust":"JSON finishing layer: {bright:-1..1, contrast:-1..1, black:0..0.98, white:0..1, curve:[x,y,...] 0-255 pairs, max 32 points}","darkroom_json":"JSON recipe: stock, process, grain, highlightTransport, lens, print, condition","keep":"true retains the upload for reuse through image_id; default false"},"filters":"https://api.phot.dev/v1/filters","film_detail":"https://api.phot.dev/v1/films/{film}","lut":{"endpoint":"https://api.phot.dev/v1/lut","method":"GET","purpose":"bake a look to a 3D .cube for Lightroom or Resolve","query":"film or preset_id, size 17|33, strength, lift, adjust, darkroom_json","note":"needs no photo and spends no quota; pointwise stages only, so lens, condition and print texture are excluded"},"suggest":{"endpoint":"https://api.phot.dev/v1/suggest","method":"POST multipart/form-data","purpose":"rank films for a photo without a full-resolution render","fields":"file or image_id, limit 1-12, preview_size 64-256, include_base64, keep","note":"spends one quota slot; pass keep=true so the follow-up develop reuses the same upload"},"response_headers":["X-PhotDev-Image-Id","X-PhotDev-Preset-Id","X-PhotDev-Film","X-PhotDev-Selection","X-PhotDev-Image-Kept","X-PhotDev-Downscaled"],"daily_limit":100,"ip_daily_limit":25,"limit_scope":"shared public transformations per UTC day; both /v1/develop and /v1/suggest spend a slot. ip_daily_limit is one address's share of that pool; exhausting it returns 429 with scope=ip while the shared pool stays open","limits":{"max_upload_mb":120,"max_input_megapixels":60,"max_output_megapixels":12,"oversize_behaviour":"downscaled to max_output_megapixels; the response carries X-PhotDev-Downscaled: <source WxH> -> <rendered WxH>"},"one_line":"curl -sS https://api.phot.dev/v1/develop -F 'file=@photo.jpg' -F 'film=Kodak Portra 400' -o developed.jpg","privacy":"The public API uploads the photo for ephemeral processing; the browser app remains on-device."}