Launched June 12th, 2026. Screenshot quality is improving quickly, and feedback is welcome. Send feedback
v2 · REST Screenshot infrastructure for mobile teams

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.

FLFastlane GHGitHub Actions +Any CI via curl
// dedicated Bitrise, Xcode Cloud & Codemagic recipes coming soon
POST /v1/renders 200 OK
# 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 ✓ ] } 
v2 · REST Screenshot infrastructure for mobile teams

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.

POST /v1/renders 200 OK
curl https://api.appscreenshotapi.com/v1/renders \
  -H "Authorization: Bearer $APPSCREENSHOTAPI_KEY" \
  -d '{ "preset": "aurora-midnight",
       "canvas": { "preset": "appstore.iphone_6_9" },
       "slides": [ ... ] }'  
Screenshot API · v2

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.

.github/workflows/screenshots.yml
- 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

CanvasesiPhone 6.9" · 6.5" · iPad 13" · Play
Designpreset + theme + slides
Framesreal · clay · flat
Lintcompliance report
OutputCDN PNGs · fastlane_zip
Deliverysync / async + webhook
The request

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.

POST /v1/renders
request.sh
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"}},
    ],
)
200 application/json
response.json
{
  "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"
}
The range

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.

The output

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.

iPhone 6.9" · 1290 × 2796
HOOK · SLIDE 01
Track every habit in one tap
Accent word · auto-contrast checked
your real UI screenshot
1290 × 2796
iPhone 6.5" · 1242 × 2688
FEATURE · SLIDE 02
See your streaks build
Panoramic background continues
your real UI screenshot
1242 × 2688
iPad 13" · 2064 × 2752
FEATURE · SLIDE 03
Built for the big screen
Same theme tokens, iPad canvas
your real UI screenshot
2064 × 2752
iPhone 6.9" · ja-JP
HOOK · SLIDE 01
ワンタップで習慣を記録
Localized via output.locales · ja-JP
your real UI screenshot
ja-JP locale
Built for pipelines

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.

CI / CD

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.

.github/workflows/screenshots.yml
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 
Pricing

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.

Free
For trying the API without a card.
$0
Get API Key
  • 3 free screenshots
  • Watermarked exports
  • REST API access
  • Docs, OpenAPI, and llms.txt
Screenshot pack
For a launch, update, or localization pass.
$18 pack
Buy screenshots
  • 1,000 screenshots
  • No watermark
  • All presets, overlays, and locales
  • API, CLI, webhooks, and ZIP exports
30% bonus
Bulk screenshots
For teams shipping larger matrices.
$48 pack
Buy screenshots
  • 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 →

FAQ

Questions teams ask before wiring it in.

Built specifically for app store screenshot automation, Fastlane screenshots, and Google Play screenshot generation from CI.

app store screenshot API Fastlane screenshots Google Play screenshot automation CI screenshot generation
Yes. appscreenshotapi is an API-first store screenshot designer. You POST one JSON request to /v1/renders (a style preset, set-wide theme tokens, and a slide per screenshot) and get back CDN-hosted, store-ready PNGs plus a compliance lint report in the same round trip. It's designed to run from GitHub Actions, Bitrise, Xcode Cloud, or any shell, including an AI coding agent's tool calls.
No. The render engine is deterministic: your real UI screenshots are composited pixel-exact and are never regenerated or "enhanced" by a model, which keeps sets guideline-safe by construction under Apple's 2.3.3 accuracy rule. Same input, same pixels, every time. The only AI surface is the optional POST /v1/briefs assist, which turns a one-sentence brief into an editable design spec that the deterministic engine then renders.
Every response includes a lint array covering headline contrast ratios, thumbnail legibility at store-card size, Google Play's 20% text-area rule, banned phrases like "#1", duplicate caption keywords, and exact Apple/Play dimension validation. Each rule is tagged OFFICIAL (a written store rule) or HEURISTIC (a best-practice check), so humans and agents can decide what to fix before submission.
Canvas presets cover the current App Store Connect classes (iPhone 6.9" at 1290×2796, 1260×2736, or 1320×2868, iPhone 6.5", and iPad 13") plus Google Play phone at 1080×1920 portrait or 1920×1080 landscape. Slides can mix devices too: dual-phone, phone + iPad, real, clay, or flat frames, caption-top or caption-bottom. Locales fan out through output.locales in the same request.
Renders come back as CDN image URLs by default, and the CLI or GitHub Action can arrange them into the locale folder structure deliver expects. Call the API from a lane or workflow step, point deliver at the output folder, and your designed screenshots upload to App Store Connect with no extra glue code.
Small sets render synchronously in one round trip. For big locale matrices, send "async": true to get a 202 with a polling URL, plus an optional webhook_url callback, then fetch GET /v1/renders/{id} when it completes. Requests accept an Idempotency-Key header, so retries in CI are safe.