Skip to content

REST API

Generate App Store screenshots programmatically over HTTPS.

Base URL

https://api.framefast.app

Authentication

All /api/* endpoints require a Bearer token with the ff_live_ prefix.

Authorization: Bearer ff_live_your_key_here
POST

/api/generate

Generate a single App Store screenshot. Returns a PNG image.

Request body (JSON)

screenshotstringrequired

Base64 data URL or public URL of the raw screenshot.

templatestringdefault: "dark-gradient"

Template ID. Options: dark-gradient, light-clean, colorful, minimal-black, neon.

devicestringdefault: "iphone-16-pro"

Device frame. Options: iphone-16-pro, iphone-16, ipad-pro.

captionTopstring

Main caption text displayed above or below the device frame.

captionBottomstring

Subtitle text.

fontSizenumberdefault: 36

Caption font size in pixels.

fontWeightnumberdefault: 700

Caption font weight.

textAlignstringdefault: "center"

Caption alignment. Options: left, center, right.

badgestringdefault: "none"

Badge overlay. Options: none, new, free, rating, pro.

deviceScalenumberdefault: 0.65

Scale of the device frame relative to the canvas.

blurBackgroundbooleandefault: false

Use the screenshot as a blurred background behind the device frame.

gradientTextbooleandefault: false

Apply a gradient effect to caption text.

textShadowbooleandefault: false

Add a drop shadow to caption text.

backgroundOverridestring

Custom CSS background value (overrides template).

widthnumberdefault: 1290

Output width in pixels.

heightnumberdefault: 2796

Output height in pixels.

Response

200 OK with Content-Type: image/png. The response body is the raw PNG bytes.

Example: curl

curl -X POST https://api.framefast.app/api/generate \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ff_live_your_key" \
  -d '{
    "screenshot": "https://example.com/my-screenshot.png",
    "template": "dark-gradient",
    "device": "iphone-16-pro",
    "captionTop": "Track your habits",
    "captionBottom": "Simple and beautiful",
    "badge": "new"
  }' \
  --output screenshot.png

Example: JavaScript

const res = await fetch(
  "https://api.framefast.app/api/generate",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: "Bearer ff_live_your_key",
    },
    body: JSON.stringify({
      screenshot: "https://example.com/my-screenshot.png",
      template: "colorful",
      device: "iphone-16-pro",
      captionTop: "Track your habits",
    }),
  }
);

const png = await res.arrayBuffer();
// Save or display the PNG
POST

/api/generate-batch

Generate screenshots for multiple App Store sizes in one request.

Additional parameter

sizesstring[]default: ["6.7"]

Array of size IDs. Options: 6.7 (1290x2796), 6.5 (1284x2778), 5.5 (1242x2208), ipad (2048x2732).

Response

Single size: returns raw PNG. Multiple sizes: returns JSON with base64-encoded PNGs.

// Multi-size response
{
  "files": [
    { "name": "screenshot-6.7.png", "size": 245891, "data": "iVBOR..." },
    { "name": "screenshot-5.5.png", "size": 198432, "data": "iVBOR..." }
  ]
}
GET

/api/templates

List all available templates with their styling defaults.

{
  "templates": [
    {
      "id": "dark-gradient",
      "name": "Dark Gradient",
      "background": "linear-gradient(135deg, #1a1a2e, #16213e)",
      "textColor": "#ffffff",
      "captionPosition": "top",
      "deviceScale": 0.65,
      "fontWeight": 700
    }
  ]
}
GET

/api/devices

List all available device frames with their dimensions.

{
  "devices": [
    { "id": "iphone-16-pro", "width": 280, "height": 607 },
    { "id": "iphone-16", "width": 270, "height": 586 },
    { "id": "ipad-pro", "width": 340, "height": 453 }
  ]
}

Errors

401 — Missing or invalid API key.

400 — Missing required screenshot field.

413 — Screenshot exceeds 5 MB limit.

500 — Server error. Response includes a detail field.