Intelligent cropping and digital-profile copy from the Digital Toolkit Engine, for any adidas team or page. Nothing you send is kept after the response.
Your API key
Call it from code
# One photo, every device of one of our components
curl -X POST https://api.toolkitengine.com/crop/v1/components/Banner%20Hero \
-H "Authorization: Bearer $DTK_KEY" \
-F image=@photo.jpg -F channel=.COM -F product=footwear
# One photo, a size of your own
curl -X POST https://api.toolkitengine.com/crop/v1/crops \
-H "Authorization: Bearer $DTK_KEY" \
-F image=@photo.jpg \
-F 'targets=[{"name":"social","width":1080,"height":1350,
"safe_zones":[{"left_pct":0,"top_pct":75,"right_pct":100,"bottom_pct":100}]}]'
# A batch — 1. create the job: what to cut, for which page, how to name the files
curl -X POST https://api.toolkitengine.com/crop/v1/jobs \
-H "Authorization: Bearer $DTK_KEY" -H "Content-Type: application/json" \
-d '{"template":[{"component":"Banner Hero","touchpoint":"HP"},
{"component":"Banner Hero","touchpoint":"WGLP"},
{"component":"Card Teaser","touchpoint":"CATLP"}],
"channel":".COM","product":"footwear","category":"Football",
"campaign":{"market":"global","campaign":"Predator Touch",
"category":"Football","season":"FW26","phase":"Launch"},
"select":"best"}'
# → {"job_id":"job_…","upload_to":"/crop/v1/jobs/job_…/photos",…}
# or, instead of uploading: "photos_from":"API TEST/your-team/shoot" (a folder your key may read;
# the crops are written back to …/shoot/crops/<job_id>/ unless "write_back":false)
# 2. upload each photo (up to 50)
curl -X POST https://api.toolkitengine.com/crop/v1/jobs/$JOB/photos \
-H "Authorization: Bearer $DTK_KEY" -F images=@photo1.jpg
# 3. start, poll until "status":"done", download the zip
curl -X POST https://api.toolkitengine.com/crop/v1/jobs/$JOB/start -H "Authorization: Bearer $DTK_KEY"
curl https://api.toolkitengine.com/crop/v1/jobs/$JOB -H "Authorization: Bearer $DTK_KEY"
curl https://api.toolkitengine.com/crop/v1/jobs/$JOB/download -H "Authorization: Bearer $DTK_KEY" -o result.zip
# Copy: one approved line, one line per digital profile
curl -X POST https://api.toolkitengine.com/copy/v1/variants \
-H "Authorization: Bearer $DTK_KEY" -H "Content-Type: application/json" \
-d '{"approved":{"title":"Designed to be worn your way"},"market":"eu",
"profiles":["football-fan"],"component":"Banner Hero"}'
product | footwear · apparel · both |
category | Originals · Football · Running |
touchpoint | HP · CATLP · CAMLP · GLP · WGLP · MGLP · PLP · PDP · APP · CRM · PN (push notification) — the page also sets the channel (APP, CRM); GET /crop/v1/touchpoints lists which components live on which page. WGLP / MGLP cut only from photos showing women / men |
select | all · best (each component from the photo that fits its shape best) |
campaign | names the files global-predator_touch-football-fw26-launch-hp-banner_hero-d.jpg (-t, -m); leave it out for <photo>-<component>-<device> |
shot_type | optional: Close-Up · Full-Body-Styling |
photos_from | a SharePoint folder of the Campaigns Workspace your key is scoped to (GET /crop/v1/sources lists them); the job reads the folder, up to 50 photos, no upload step |
write_back | true (default) uploads the crops and report.json to <photos_from>/crops/<job_id>/; the status then carries delivered_to. The zip download stays either way |
Ready-made, same flags, no packages: crop_batch.py (Python 3) · crop_batch.ts (Node 18+, npx tsx crop_batch.ts …) · Claude Code skill (save as ~/.claude/skills/crop-photos/SKILL.md, key in CROP_API_KEY)
A batch from Terminal
Components, by page — the page goes into the file name; the number is how many (tiles for Group Media); each is cut for desktop, tablet and mobile
Paste your key above to see the components.