REST API
Generate App Store screenshots programmatically over HTTPS.
Base URL
https://api.framefast.appAuthentication
All /api/* endpoints require a Bearer token with the ff_live_ prefix.
Authorization: Bearer ff_live_your_key_here/api/generate
Generate a single App Store screenshot. Returns a PNG image.
Request body (JSON)
screenshotstringrequiredBase64 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.
captionTopstringMain caption text displayed above or below the device frame.
captionBottomstringSubtitle text.
fontSizenumberdefault: 36Caption font size in pixels.
fontWeightnumberdefault: 700Caption font weight.
textAlignstringdefault: "center"Caption alignment. Options: left, center, right.
badgestringdefault: "none"Badge overlay. Options: none, new, free, rating, pro.
deviceScalenumberdefault: 0.65Scale of the device frame relative to the canvas.
blurBackgroundbooleandefault: falseUse the screenshot as a blurred background behind the device frame.
gradientTextbooleandefault: falseApply a gradient effect to caption text.
textShadowbooleandefault: falseAdd a drop shadow to caption text.
backgroundOverridestringCustom CSS background value (overrides template).
widthnumberdefault: 1290Output width in pixels.
heightnumberdefault: 2796Output 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.pngExample: 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/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..." }
]
}/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
}
]
}/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.