Store-ready screenshot sets from one API call.
One POST /v1/renders turns your real app captures into a designed, framed, captioned App Store or Google Play set, with a compliance lint report in the same response.
# one call: whole set in, store-ready PNGs out curl https://api.appscreenshotapi.com/v1/renders \ -H "Authorization: Bearer $APPSCREENSHOTAPI_KEY" \ -d '{ "preset": "aurora-midnight", "canvas": { "preset": "appstore.iphone_6_9" }, "slides": [ ...your screenshots + headlines ] }' # → designed, framed, captioned, linted { "id": "rnd_8Fq2", "status": "succeeded", "images": [ 6 × 1290 × 2796 PNG ], "lint": [ contrast ✓ · thumbnail ✓ · no banned phrases ✓ ] }
Store-ready screenshot sets from one API call.
Built for CI, Fastlane, and AI coding agents. POST one JSON request with your real captures and copy; get back a designed, linted store set.
curl https://api.appscreenshotapi.com/v1/renders \ -H "Authorization: Bearer $APPSCREENSHOTAPI_KEY" \ -d '{ "preset": "aurora-midnight", "canvas": { "preset": "appstore.iphone_6_9" }, "slides": [ ... ] }'
The screenshot designer,
as an endpoint.
Stop opening a screenshot-maker website before every release. POST /v1/renders with your captures and copy, get back a designed, framed, compliance-linted store set, wired straight into CI and Fastlane.
- name: Render store screenshot set uses: appscreenshotapi/action@v2 with: api_key: ${{ secrets.APPSCREENSHOTAPI_KEY }} request: store/render.json screenshots: build/captures locales: en-US, de-DE, ja-JP, fr-FR output: fastlane/screenshots
// what comes back
One request in. A store-ready set out.
Describe the whole listing in one JSON body: a named preset, set-wide theme tokens, and a slide per screenshot. appscreenshotapi designs, frames, captions, and lints the set, then returns CDN-hosted PNGs in one round trip.
curl -X POST https://api.appscreenshotapi.com/v1/renders \ -H "Authorization: Bearer $APPSCREENSHOTAPI_KEY" \ -H "Content-Type: application/json" \ -d '{ "preset": "aurora-midnight", "canvas": { "preset": "appstore.iphone_6_9" }, "theme": { "accentColor": "#5EEAD4" }, "slides": [ { "role": "hook", "headline": { "lines": ["Track every habit", "in one tap"], "accent": "one tap" }, "screenshot": { "url": "https://acme.app/shots/home.png" } }, { "role": "proof", "headline": { "lines": ["Loved by 40,000 builders"] }, "screenshot": { "url": "https://acme.app/shots/stats.png" }, "overlays": [{ "kind": "stars", "rating": 4.9 }] } ] }'
import AppScreenshotAPI from "appscreenshotapi"; const client = new AppScreenshotAPI(process.env.APPSCREENSHOTAPI_KEY); const render = await client.renders.create({ preset: "aurora-midnight", canvas: { preset: "appstore.iphone_6_9" }, theme: { accentColor: "#5EEAD4" }, slides: [ { role: "hook", headline: { lines: ["Track every habit", "in one tap"] }, screenshot: { url: "https://acme.app/shots/home.png" } }, { role: "proof", overlays: [{ kind: "stars", rating: 4.9 }], screenshot: { url: "https://acme.app/shots/stats.png" } }, ], });
from appscreenshotapi import AppScreenshotAPI client = AppScreenshotAPI(os.environ["APPSCREENSHOTAPI_KEY"]) render = client.renders.create( preset="aurora-midnight", canvas={"preset": "appstore.iphone_6_9"}, theme={"accentColor": "#5EEAD4"}, slides=[ {"role": "hook", "headline": {"lines": ["Track every habit", "in one tap"]}, "screenshot": {"url": "https://acme.app/shots/home.png"}}, {"role": "proof", "overlays": [{"kind": "stars", "rating": 4.9}], "screenshot": {"url": "https://acme.app/shots/stats.png"}}, ], )
{ "id": "rnd_8Fq2yK", "status": "succeeded", "images": [ { "url": "https://cdn.appscreenshotapi.com/rnd_8Fq2yK/01.png", "width": 1290, "height": 2796 }, { "url": "https://cdn.appscreenshotapi.com/rnd_8Fq2yK/02.png", "width": 1290, "height": 2796 } ], "lint": [ { "rule": "headline_contrast", "authority": "HEURISTIC", "status": "pass", "detail": "7.2:1 on slide 1" }, { "rule": "apple_dimensions", "authority": "OFFICIAL", "status": "pass" } ], "credits_used": 2, "expires_at": "2026-07-11T00:00:00Z" }
One API. Every style.
17 presets, custom themes, background patterns, device frames, iPad and landscape canvases, brand slides, and review overlays, all from the same request shape. Tap any to enlarge.
Every size each store demands, designed and ready to upload.
appscreenshotapi renders at the exact dimensions App Store Connect and Google Play require (iPhone 6.9" and 6.5", iPad 13", and Play portrait or landscape) and validates each export against the store rule before it counts.
1290 × 2796
1242 × 2688
2064 × 2752
ja-JP locale
A design system, not a screenshot editor.
Everything a polished store listing needs (backgrounds, typography, frames, proof, compliance) exposed as JSON you call from code.
Deterministic engine
Your real UI, pixel-exact, never regenerated by AI. Same input, same pixels, reproducible re-renders. Guideline-safe by construction against Apple 2.3.3.
A real design system
Mesh and aurora gradients, photo backgrounds with scrims, 13 patterns, 8 webfont treatments, clay/flat/real device frames, tuned shadows, and 3D tilt.
Set-level intelligence
One request renders the whole listing: panoramic backgrounds across slides, locked type scale, aligned device rows, and hook→feature→proof→close story flow.
Compliance linting
Every response includes a lint report covering contrast ratios, thumbnail legibility, the Play 20% text rule, banned phrases, and dimension checks, each tagged OFFICIAL vs HEURISTIC.
Proof elements
Star ratings, award laurels, trust pills, testimonial quote cards, press quotes, and review stacks, all composable overlays on any slide.
Agent-native + optional AI brief
One tool call, published JSON schema, machine-readable lint feedback for self-correction. Optional /v1/briefs turns one sentence into an editable design spec.
Screenshots that regenerate on every release.
Wire appscreenshotapi into the pipeline you already run. Captures go in on build; fresh, localized store assets come out, committed or uploaded automatically.
name: Store Screenshots on: push: tags: ["v*"] jobs: screenshots: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Render via appscreenshotapi (plain HTTP, no action to install) env: ASA_KEY: ${{ secrets.APPSCREENSHOTAPI_KEY }} run: | curl -fsS -X POST https://api.appscreenshotapi.com/v1/renders \ -H "Authorization: Bearer $ASA_KEY" \ -H "Content-Type: application/json" \ --data @store/render.json -o screenshots.zip
# fastlane/Fastfile lane :screenshots do # no plugin needed — call the HTTP API and unzip the fastlane set sh("curl -fsS -X POST https://api.appscreenshotapi.com/v1/renders -H \"Authorization: Bearer #{ENV['APPSCREENSHOTAPI_KEY']}\" -H 'Content-Type: application/json' --data @store/render.json -o screenshots.zip") sh("unzip -o screenshots.zip -d fastlane/screenshots") # hand the set straight to App Store Connect deliver( screenshots_path: "fastlane/screenshots", skip_binary_upload: true, skip_metadata: true ) end
# a dedicated CLI is coming soon — use the HTTP API today curl -fsS -X POST https://api.appscreenshotapi.com/v1/renders \ -H "Authorization: Bearer $APPSCREENSHOTAPI_KEY" \ -H "Content-Type: application/json" \ --data @store/render.json \ | jq -r '.images[].url' # → store-ready PNG URLs · lint report included
Buy screenshots, not another monthly plan.
One screenshot equals one final exported screenshot image. Every pack includes the same API, presets, design system, lint reports, localization, CI exports, and agent workflow support.
- 3 free screenshots
- Watermarked exports
- REST API access
- Docs, OpenAPI, and llms.txt
- 1,000 screenshots
- No watermark
- All presets, overlays, and locales
- API, CLI, webhooks, and ZIP exports
- 3,500 screenshots
- No watermark
- All presets, overlays, and locales
- API, CLI, webhooks, and ZIP exports
1 screenshot = 1 final exported screenshot image. A 6-slide set rendered to 2 canvases in 2 locales uses 24 screenshots (credits_used: 24). Agents receive a Stripe Checkout top-up URL when a key runs low. See full limits →
Questions teams ask before wiring it in.
Built specifically for app store screenshot automation, Fastlane screenshots, and Google Play screenshot generation from CI.