Feature graphics
Turn one screen into a campaign-ready headline image.
Start with the Wanderlust project and generation setup in StoreShot, then produce a polished Google Play feature graphic without leaving the project.
Screenshot API for app developers
Turn raw app screens into App Store and Google Play marketing images at exactly the sizes the stores require. One REST API, built for scripts, CI and AI coding agents.
4 free credits on your first key · test keys are always free
curl
export STORESHOT_API_KEY=ss_test_… # free while you integrate
# 1. Upload a raw screenshot
UPLOAD=$(curl -sS -H "Authorization: Bearer $STORESHOT_API_KEY" \
-F file=@home.png https://api.storeshot.art/v1/uploads | jq -r .id)
# 2. Generate a 1290×2796 App Store image (waits up to 60 s)
curl -sS https://api.storeshot.art/v1/generations \
-H "Authorization: Bearer $STORESHOT_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: home-en-1' -H 'Prefer: wait=60' \
-d '{"inputs":[{"uploadId":"'$UPLOAD'"}],"store":"app_store",
"device":"app_store_1290x2796","app":{"name":"Trailmate"}}' \
| jq '{status, url: .result.image.url}' Node.js
import { readFile } from 'node:fs/promises';
const api = 'https://api.storeshot.art/v1';
const headers = { Authorization: `Bearer ${process.env.STORESHOT_API_KEY}` };
const form = new FormData();
form.append('file', new Blob([await readFile('home.png')]), 'home.png');
const upload = await (await fetch(`${api}/uploads`, { method: 'POST', headers, body: form })).json();
const res = await fetch(`${api}/generations`, {
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json',
'Idempotency-Key': 'home-en-1', Prefer: 'wait=60' },
body: JSON.stringify({
inputs: [{ uploadId: upload.id }],
store: 'app_store',
device: 'app_store_1290x2796',
app: { name: 'Trailmate' },
}),
});
const generation = await res.json();
console.log(generation.status, generation.result?.image.url); Python
import os, requests
api = "https://api.storeshot.art/v1"
h = {"Authorization": f"Bearer {os.environ['STORESHOT_API_KEY']}"}
upload = requests.post(f"{api}/uploads", headers=h,
files={"file": open("home.png", "rb")}).json()
generation = requests.post(
f"{api}/generations",
headers={**h, "Idempotency-Key": "home-en-1", "Prefer": "wait=60"},
json={"inputs": [{"uploadId": upload["id"]}], "store": "app_store",
"device": "app_store_1290x2796", "app": {"name": "Trailmate"}},
).json()
print(generation["status"], (generation["result"] or {}).get("image", {}).get("url")) How you can use it
POST a raw screenshot, get back a PNG at exactly the size App Store Connect or Google Play Console asks for. A whole listing is one screenshot-set call.
API overviewGive Claude Code, Cursor or any coding agent your key and one prompt. It uploads your simulator captures and drops a fastlane-ready ZIP in your repo.
Copy the promptCreate live and test keys, watch generations and credits, buy packs or a monthly plan in the developer console.
Open the consoleThe StoreShot apps for iPhone and Android do the same from your camera roll, with in-app purchases.
See the appsHow it works
Send the raw screenshots you already have: POST /uploads with a file or a URL.
Pick the store and device. StoreShot writes the caption if you skip it, keeps your palette and logo, and renders the exact size.
Download the PNGs or one ZIP in fastlane folders, or get a signed webhook when the set is done.
See the transformation
Bring the screens. StoreShot turns them into a cohesive visual story built for the store.
Feature graphics
Start with the Wanderlust project and generation setup in StoreShot, then produce a polished Google Play feature graphic without leaving the project.
Panorama screenshots
Build a composition that flows across panels, connects each product moment, and rewards the swipe.
Mobile apps
Create the same store visuals from your phone. Learn about the apps.
Create a key in the developer console and run the quickstart with a free test key.