Screenshot API for app developers

Store-ready screenshots from an API call — or just tell your agent.

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

API, agents, console or app.

How it works

From raw screen to store listing.

  1. Upload

    Send the raw screenshots you already have: POST /uploads with a file or a URL.

  2. Generate

    Pick the store and device. StoreShot writes the caption if you skip it, keeps your palette and logo, and renders the exact size.

  3. Ship

    Download the PNGs or one ZIP in fastlane folders, or get a signed webhook when the set is done.

See the transformation

Your product is already the raw material.

Bring the screens. StoreShot turns them into a cohesive visual story built for the store.

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.

Before
StoreShot project screen configuring the Wanderlust feature graphic
After
Generated Wanderlust Google Play feature graphic with a campaign-ready travel composition

Panorama screenshots

Make separate screens feel like one continuous story.

Build a composition that flows across panels, connects each product moment, and rewards the swipe.

Before · 3 source screens
Raw Wanderlust panorama source screen showing Madeira search results Raw Wanderlust panorama source screen showing Lido Ocean Suites Raw Wanderlust panorama source screen showing Cliff Bay Retreat
After · 1 coordinated story
Generated Wanderlust panorama panel labeled Search Generated Wanderlust panorama panel labeled Compare

Pricing

Pay per image. Start free.

1 credit per generated image. 4 free credits with your first API key, free test keys for development, automatic refunds when a generation fails.

Credit packs
from $3.99
Monthly plans
from $12 / month
See pricing

Mobile apps

Not a developer? Use the app.

Create the same store visuals from your phone. Learn about the apps.

Your next listing is one request away.

Create a key in the developer console and run the quickstart with a free test key.