Developers

The Meme API

JSON under /api/v1, with application/problem+json errors. A person is the meme_at session cookie or a Network user token as a Bearer.

Read

GET /api/v1/entries?limit=&cursor=&kind=&status=
Public entries, newest first, cursor-paged (at most 50).
GET /api/v1/memes?scope=internet&q=&sort=top&window=week
Meme-library alias for public entries with collection, search, and usage filters.
GET /api/v1/entries/:slug
One entry with every citation and the use timeline. A hidden one is 404 unless you are staff.
GET /api/v1/memes/:slug
Meme-library alias for an entry, including its citations and timeline.
GET /api/v1/entries/:slug/series?days=30
Uses per UTC day, zero-filled (1–365 days).
GET /api/v1/trending
Public entries, rising first.
GET /api/v1/week
This ISO week’s candidates and their vote counts.
GET /api/v1/templates
Caption templates: image, box count, source and license.
POST /api/v1/caption-ideas
Signed-out safe caption suggestions using the cheapest OpenVibe.AI route by default; at most 8 requests per minute per address.
POST /api/v1/render
Render a caption as PNG, GIF or MP4 from a licensed template, 1–4 lines and optional editor geometry.
GET /api/v1/captions/:id/render?format=png|gif|mp4
Download the rendered public caption; private captions require their owner or staff.
GET /api/v1/captions/:id
One saved caption (a hidden one is 404 unless it is yours or you are staff).

Write (signed in)

POST /api/v1/week/vote
{ entry_id }. One vote a week per person; a second call changes the choice. Same-origin.
POST /api/v1/captions
{ template_id, lines, visibility? }: 1–4 lines, each at most 120 characters, text only, blocked words refused.
POST /api/v1/templates/uploads
{ name, image } (PNG/JPEG/WebP data URL, at most 6 MB), stored in Media and held for staff review.
POST /api/v1/entries/:slug/report
{ kind: "takedown"|"correction", reason, note? } for staff review.

Staff (Network role global_mod or above)

GET /api/v1/staff/templates/uploads
List member-uploaded templates waiting for review.
POST /api/v1/staff/templates/:id/review
{ decision: "approved"|"rejected" }.
POST /api/v1/entries/:slug/publish
Make a hidden candidate public. Refused when its origin citation is gone (409).
POST /api/v1/entries/:slug/hide
Remove it from public lists and tombstone its Search document.
PATCH /api/v1/entries/:slug
{ title, kind, status }: change an entry; status history is kept.
GET /api/v1/reports
The open takedown/correction reports.