Screenshot & OG Images. One API Call.
Generate an OG image with a single HTTP request:
# Simple GET request
curl "https://shotog.2214962083.workers.dev/v1/og?title=Hello%20World&template=basic"
# With all options
curl "https://shotog.2214962083.workers.dev/v1/og?title=My%20Post&subtitle=A%20great%20read&template=blog&eyebrow=Tech&author=Jane"
# Or use POST with JSON
curl -X POST https://shotog.2214962083.workers.dev/v1/og \
-H "Content-Type: application/json" \
-d '{"title":"Hello","template":"product","eyebrow":"NEW"}'
Use any TTF or OTF font by passing a URL. No upload needed — just point to your font file.
# Use a custom font via URL
curl "https://shotog.2214962083.workers.dev/v1/og?title=Hello%20World&fontUrl=https://example.com/fonts/Poppins-Regular.ttf"
# Works with Google Fonts direct links, GitHub raw URLs, etc.
curl "https://shotog.2214962083.workers.dev/v1/og?title=Hello&fontUrl=https://github.com/google/fonts/raw/main/ofl/poppins/Poppins-Regular.ttf"
# Graceful fallback: if the font URL fails, Inter is used automatically
# Check X-Font-Fallback: true header to detect fallback
Generate up to 20 OG images in a single API call. Perfect for blog indexes, sitemaps, and CI/CD pipelines.
# Generate multiple images at once
curl -X POST https://shotog.2214962083.workers.dev/v1/og/batch \
-H "Content-Type: application/json" \
-H "X-Api-Key: sk_..." \
-d '{
"images": [
{"id": "hero", "title": "My Product", "template": "product"},
{"id": "blog-1", "title": "First Post", "template": "blog", "author": "Alice"},
{"id": "blog-2", "title": "Second Post", "template": "blog", "author": "Bob"}
],
"defaults": {"format": "png", "width": 1200, "domain": "example.com"}
}'
# Returns JSON with base64 data URIs for each image
# { "results": [{ "id": "hero", "success": true, "dataUri": "data:image/png;base64,..." }, ...] }
Choose from 8 built-in templates, each fully customizable:
Try it live — customize and preview your OG image:
curl -X POST https://shotog.2214962083.workers.dev/v1/keys \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com"}'
# Returns: { "key": "sk_...", "tier": "free", "monthly_limit": 500 }