Gallery
Real outputs from every live endpoint, with the request that produced each one.
Every example below is a real API output. The request body is the exact JSON we sent; the image URLs are the unedited responses. No cherry-picking — these are first-shot results from a single key.
This gallery is refreshed regularly as we tune templates and add new models.
POST /v1/meme/generate — text-to-meme
Prompt: "the perfect monday morning: no meetings, hot coffee, boss is OOO"
The AI picked the "Two Men Talking at Stadium" template (tpl_elontrumpforcharlie) and wrote a three-region caption:
- left-man-label: "Hot coffee"
- right-man-label: "Boss's OOO reply"
- conversation-caption: "we quietly murdered the meetings"
{
"text": "the perfect monday morning: no meetings, hot coffee, boss is OOO",
"count": 1
}→ 
Open full size · Reasoning from the model: "The conspiratorial chat format makes the perfect Monday feel like coffee and the boss's OOO reply quietly conspiring to murder the meetings."
POST /v1/meme/ai-image — AI-original imagery
No template. Generate an original image and overlay captions.
{
"prompt": "a confused cat looking at deployment errors",
"caption": {
"top": "WORKS ON MY MACHINE",
"bottom": "MY MACHINE WAS LYING"
},
"model": "gpt-image",
"aspect_ratio": "1:1"
}→ 
Open full size · Generated by gpt-image-1 in 36.5s, NSFW score 0.0006.
POST /v1/meme/caption — caption a known template
Pick a template, supply your captions verbatim. Best when you already know the format.
{
"template_id": "tpl_disappearingguy",
"captions": [
{ "text": "when the build finally passes", "position": "top" }
]
}→ 
Open full size · Rendered in 2.85s, 1 credit. Same pipeline that powers /meme/generate — just with you choosing the template + captions instead of the AI.
GET /v1/templates — browse the library
GET /v1/templates?limit=3&category=reactions{
"success": true,
"data": {
"templates": [
{
"id": "tpl_ghiblidayssincememe",
"name": "0 Days Since Last",
"slug": "ghiblidayssincememe",
"category": "reactions",
"tags": ["counter", "since last", "incident", "0 days", "safety sign", "..."]
}
],
"total": "(hundreds across categories)",
"categories": ["reactions", "comparison", "animals", "gaming", "tech", "..."]
}
}Filter by category, search, verified, paginate with limit + offset.
GET /v1/trending — what's hot right now
{
"success": true,
"data": {
"templates": [
{
"id": "tpl_disappearingguy",
"name": "Kid Looking Back At Camera",
"category": "reactions",
"trending_rank": 1,
"velocity": "new"
},
{
"id": "tpl_be-honest",
"name": "Beckham Eavesdropping",
"category": "reactions",
"trending_rank": 2,
"velocity": "new"
}
]
}
}Returns templates ranked by recent caption velocity. Useful for "what's the meme right now" surfaces.
GET /v1/templates/{id} — single template detail
A real response for tpl_disappearingguy:
{
"id": "tpl_disappearingguy",
"name": "Kid Looking Back At Camera",
"category": "reactions",
"box_count": 3,
"box_positions": [
{
"name": "left-panel-caption",
"role": "Labels what the subject is supposedly doing or the surface-level innocent situation",
"max_chars": 45,
"max_lines": 2,
"text_style_hint": "short noun phrase or ironic statement"
}
],
"tags": ["main", "side-eye", "suspicious", "caught", "sneaky", "looking back"]
}The box_positions array is the differentiator: each region has a role (semantic meaning), a max_chars budget, and a text_style_hint the caption AI respects. Most meme APIs give you only pixel coordinates.
GET /v1/models — available AI models
{
"success": true,
"data": {
"models": [
{
"id": "gpt-image",
"name": "GPT Image 1",
"provider": "OpenAI",
"capabilities": ["image_generation", "image_editing", "text_overlay"],
"max_resolution": "1792x1024",
"avg_generation_time_ms": 4500,
"status": "operational",
"credits_per_request": 3
},
{
"id": "gpt-image-1.5",
"name": "GPT Image 1.5",
"provider": "OpenAI",
"status": "operational"
}
]
}
}Use this to discover available image models and caption-writing models (GPT, Claude, Grok). Lets you build dynamic pickers in your own UI.
GET /v1/templates/{id}/image — blank template image
GET /v1/templates/tpl_disappearingguy/image → 302 Location: <CDN URL>
Useful when your client renders captions itself or wants a preview thumbnail. Free.