memeworld
Documentation

REST

Endpoints

Search, read, suggest and render over plain HTTP.

The same capabilities over plain HTTP, for agents and scripts that don't speak MCP. Full schema at https://memeworld.afterlume.workers.dev/api/openapi.json.

Search the catalog

curl 'https://memeworld.afterlume.workers.dev/api/v1/templates?q=drake&kind=still&limit=12'

q, kind, tag, limit, seed and cursor. The response carries total, items and nextCursor — pass nextCursor back as cursor for the next page.

Read one template

curl 'https://memeworld.afterlume.workers.dev/api/v1/templates/drake-hotline-bling-42'

Returns the text box ids captions are keyed by, example captions, and the guide describing how that format's joke works. Id, slug and <slug>-<id> all resolve.

List tags

curl 'https://memeworld.afterlume.workers.dev/api/v1/tags'

Turn an idea into captioned templates

curl -X POST https://memeworld.afterlume.workers.dev/api/v1/suggest \
  -H 'content-type: application/json' \
  -d '{"prompt": "this meeting could have been a Slack message", "count": 4}'

Open to anonymous callers, unlike the MCP tool. Each variant comes back with its template, the captions in text box order, why it was picked, and an editorPath a human can open. Repeating a prompt is answered from cache and costs nothing.

Render

curl -X POST https://memeworld.afterlume.workers.dev/api/v1/render \
  -H 'x-api-key: mw_...' \
  -H 'content-type: application/json' \
  -d '{"templateId": 42, "captions": ["writing the api by hand", "letting the agent do it"]}'
{
  "url": "https://memeworld.afterlume.workers.dev/cdn/renders/9f2c4a1b8e7d6c5b4a39281706f5e4d3.png",
  "format": "png",
  "width": 1200,
  "height": 1200,
  "bytes": 184320,
  "cached": false
}

Body fields: templateId, captions, format, preset, watermark. This is the only endpoint that needs a key.

Renders are content addressed — the same template, captions, preset and watermark always return the same URL, so a repeated request answers from storage with cached: true.

Face swap and credits

POST   /api/v1/face-swap      put a face into a still template
GET    /api/v1/face-swap      the calling account's swaps
GET    /api/v1/face-swap/{id} one swap
GET    /api/v1/credits        balance, costs and recent ledger

All four need a key, and a swap needs credits. See Face swap and Credits.

Rendering is closed

There is no arbitrary image URL input anywhere in this API. Every render is against a memeworld template, so nothing here can be pointed at another host.