---
name: memeskill
description: Find the right meme template for a feeling or situation and caption it, using the MemeSkill library (meme-skill.com). Use when the user wants a meme, a reaction image, or memes to illustrate an article, post, slide or chat message, or asks which meme fits a moment.
---

# MemeSkill

MemeSkill is a library of meme templates searchable by feeling and situation. Each template comes
with what it means, when to use it, its text boxes, image URLs, license and an attribution line.
You pick a template, write the captions, and give the user a link that opens the template with
those captions filled in, ready to download or copy.

API base: `https://api.meme-skill.com/open/v1`

## Authentication

A key is optional. Without one you get 50 requests a day per IP address. If the environment variable
`MEMESKILL_API_KEY` is set, send it on every request:

```bash
curl -s "https://api.meme-skill.com/open/v1/search?q=awkward" \
  -H "Authorization: Bearer $MEMESKILL_API_KEY"
```

If `MEMESKILL_API_KEY` is empty, call without the header. Free keys allow 1,000 requests a day,
Pro keys 10,000. Users create keys at https://meme-skill.com/account.

## Endpoints

| Call | What it returns |
| --- | --- |
| `GET /search?q=<text>&limit=10&commercial=true` | Templates matching a feeling, situation or name, best first. `limit` up to 50. `commercial=true` keeps only templates cleared for commercial use. |
| `GET /templates/<slug>` | One template in full. |
| `GET /tags` | Feelings and topics, with template counts. |
| `GET /tags/<slug>/templates?limit=20` | Templates for one feeling or topic. |
| `POST /editor-links` with `{"slug": "...", "captions": {"top": "...", "bottom": "..."}}` | `{"editorUrl": "..."}`: the template opened with your captions. |
| `GET /account` | Your tier, daily limit and usage. Doesn't count toward the limit. |

Every template has:

- `slug`, `name`, `meaning` (what the meme says and when to use it), `usage` (example situations)
- `textBoxes`: `id` and `placeholder` for each caption slot (`x`, `y`, `w`, `h` are positions as a fraction of the image)
- `image.previewUrl` (800px WebP for embedding) and `image.url` (original)
- `pageUrl` (the template page, also the editor)
- `license.commercialUse`, `attribution` (one line to credit it), `markdown` (image plus credit, ready to paste)

Errors look like `{"error": {"code": "...", "message": "..."}}`. `429` with code `quota_exceeded`
means the daily limit is used up (resets at midnight UTC); `rate_limited` means slow down for a
minute; `401` means the key is wrong or revoked.

## How to make a good meme

1. Work out the feeling or situation in a few words ("smug after fixing a bug", "Monday dread").
   Search for that, not for the topic of the article.
2. Read `meaning` before choosing. The best template is the one whose meaning matches the joke,
   not the one whose name matches a keyword. If nothing fits, search again with different words
   or browse `/tags`.
3. Write one caption per text box, using the box `id`s. Keep captions short: a few words per box,
   under 120 characters. Follow the template's format (for example, the first box is the setup,
   the last is the punchline).
4. Call `POST /editor-links` to get the link. Show the user the preview image and the link; they
   can adjust the text and download or copy the finished meme there.
5. If the user needs it for commercial use (ads, products, client work), search with
   `commercial=true` and say so if nothing is cleared. Otherwise mention that the template is fine
   for personal use and sharing.
6. When a meme goes into an article or a page, include the `attribution` line (the `markdown` field
   already has it).

## Illustrating an article

Read the article and pick the 2–4 moments that carry a clear emotion (a struggle, a win, a twist).
For each one, search by that emotion, choose a template, write captions that tie it to the
paragraph, and place the `markdown` (or the editor link, if the user wants captions on the image)
right after the paragraph. Don't put two memes in a row and don't reuse a template.

## Example

```bash
curl -s "https://api.meme-skill.com/open/v1/search?q=it%20works%20and%20I%20don%27t%20know%20why&limit=5"

curl -s -X POST "https://api.meme-skill.com/open/v1/editor-links" \
  -H "Content-Type: application/json" \
  -d '{"slug": "drake-hotline-bling", "captions": {"top": "Reading the docs", "bottom": "Asking the AI"}}'
```

On Windows PowerShell, use `curl.exe` instead of `curl`.

## MCP

The same features are available as an MCP server at `https://api.meme-skill.com/mcp`, with the tools
`search_meme_templates`, `get_meme_template`, `list_meme_tags`, `meme_templates_for_tag` and
`make_meme_link`. Docs: https://meme-skill.com/agents
