---
title: "The OpenVibe.Meme API"
canonical: "https://openvibe.meme/developers"
updated: null
---

# The OpenVibe.Meme API

HTML: [The OpenVibe.Meme API](https://openvibe.meme/developers)

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.

## Search

Each public entry is one `search.index-document@1` (owner `meme`, type `entry`, canonical page `/m/<slug>`) queued in `meme_outbox` and delivered to OpenVibe.Search within a minute; hiding or deleting an entry queues a tombstone. The importer reads only public APIs and never publishes: a candidate stays hidden until a staff person publishes it.
