V1 Public API

API Documentation

Programmatic access to the Insider Memes template library and meme generation. Connect your apps, bots, and workflows — or use the AI Connector to talk to Insider Memes directly from assistants like Claude and Cursor.

Overview

The Insider Memes API lets you do two main things: explore our meme template library and generate new memes on demand. Every request goes to the same base URL, and you authenticate with your personal API key.

All endpoints live under /v1/. See the Authorization section for how to authenticate, and the Endpoints section for full request and response examples. Prefer chatting with an AI assistant? See MCP & Skills for Claude, Cursor, and other MCP-compatible tools.

Base URL

Prepend this to every endpoint path below. Your environment may use a different host — the value shown matches your current deployment.

url
https://backend.insidermemes.com/v1/

Quick Start

You can be up and running in a few minutes. Here is the typical flow:

  1. Get an API token — either from profile settings (click Reveal API Key) or programmatically via JWT login and POST /v1/api/token/.
  2. Make a test request to list templates (see example below). If you get a 200 response, your token is working.
  3. Send a POST to the generate endpoint with a short text prompt. Each returned meme costs 1 credit.

Copy-paste examples

bash
# 1. Log in (get JWT access token)
curl -X POST "https://backend.insidermemes.com/users/api/dj-rest-auth/login/" \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "password": "your-password"}'

# 2. Mint API token (use access token from step 1)
curl -X POST "https://backend.insidermemes.com/v1/api/token/" \
  -H "Authorization: Bearer <access-token>"

# 3. List image templates (newest first)
curl "https://backend.insidermemes.com/v1/templates/?type=images&sort=new" \
  -H "Authorization: Token <api-token>"

# 4. Generate 3 image memes from a prompt
curl -X POST "https://backend.insidermemes.com/v1/generate/" \
  -H "Authorization: Token <api-token>" \
  -H "Content-Type: application/json" \
  -d '{"text": "Monday morning meetings", "mediaType": "images", "count": 3}'

Authorization

V1 uses a two-step auth flow: log in with JWT to mint an API token, then use that token on all /v1/ requests. Your token is tied to your Insider Memes account — anyone who has it can use your credits and access your plan features, so keep it private and never commit it to public repos.

Step 1: Get a JWT

POST /users/api/dj-rest-auth/login/ with your email and password. Use the access value from the response as a Bearer token.

bash
curl -X POST "https://backend.insidermemes.com/users/api/dj-rest-auth/login/" \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "password": "your-password"}'

# Response (200 OK):
# { "access": "<jwt-access-token>", "refresh": "<jwt-refresh-token>", "user": { } }

Step 2: Mint an API token

POST /v1/api/token/ with your JWT, or reveal your key from profile settings. Each user has one API token — calling POST again returns the existing token.

bash
curl -X POST "https://backend.insidermemes.com/v1/api/token/" \
  -H "Authorization: Bearer <jwt-access-token>"

# Response (201 Created or 200 OK):
# { "token": "9944b09199c62bcf9418ad846aa0e4edf6d1", "created": "2026-06-05T12:00:00Z" }

Step 3: Call V1 endpoints

Use your API token on all /v1/ requests. JWT (Bearer) also works on /v1/templates/ and /v1/generate/, but API tokens are intended for programmatic use.

bash
Authorization: Token <api-token>
Content-Type: application/json

Revoke an API token

DELETE /v1/api/token with your JWT. Returns 204 No Content. Call POST /v1/api/token again to create a new token.

bash
curl -X DELETE "https://backend.insidermemes.com/v1/api/token/" \
  -H "Authorization: Bearer <jwt-access-token>"

Good to know

  • Each account has one API token. Revealing it again returns the same token unless you have revoked it.
  • Revoking a token takes effect immediately — update any apps using the old token right away.
  • Requests and responses use camelCase JSON keys.
Never share your API token or expose it in client-side code that ships to users. Store it in environment variables on your server.

Credits & Pricing

API usage draws from the same credit balance as the Insider Memes website. Each returned meme costs 1 credit (creditCostPerMeme). Browsing templates is included with your plan — generation is what uses credits.

How credits work

  • 1 credit = 1 returned meme — image or video counts the same. You are only charged for memes actually returned in the response.
  • Credits are tied to your account, not your API key. Revoking a key does not reset your balance.
  • The generate response includes creditsUsed, creditsRemaining, and returnedCount after each batch so you can track usage in real time.
  • You are only charged for memes that are successfully generated and returned (returnedCount × creditCostPerMeme).
  • If you run out, the API returns a 402 error with how many credits you need vs. have.

Plans at a glance

PlanCreditsAPI access
FreeLimited trial creditsFirst page of templates only
LibraryNoneFull template browsing, no generation
Basic300 / monthImage & video generation
Pro1,000 / monthImage & video generation
Business3,000 / monthImage & video generation

Paid plans also unlock template search, filters, and cursor pagination. Video generation requires a paid plan with video access.

For full pricing details, monthly vs. yearly billing, and plan comparisons, visit the pricing page. You can manage your subscription from billing settings once subscribed.

MCP & Skills

Use Insider Memes inside Claude and other MCP-compatible AI assistants. Browse meme templates and generate ready-to-post memes from a simple text prompt — without leaving the chat.

What you can do

CapabilityWhat it does
Browse templatesSearch the Insider Memes library by type, category, and sort order.
Generate memesTurn a text prompt into a batch of memes with hosted image or video URLs.

Your AI assistant calls these as tools (sometimes shown as skills or connectors in the host app). You describe what you want in plain language; the assistant handles the rest.

Requirements

  • An Insider Memes account with a paid plan (template browsing and generation require a paid subscription)
  • Credits on your account for meme generation — see
  • For hosted connectors, sign in with Insider Memes during the OAuth browser flow. For local bridge setups, use an API key from profile settings.

Connect on claude.ai with OAuth

Recommended

The hosted MCP connector uses OAuth, so you do not paste an API key into Claude. Claude opens Insider Memes in your browser, you sign in, approve access, and Claude receives a scoped token for your account.

  1. Open claude.ai → Settings → Connectors
  2. Choose Add custom connector
  3. Name: Insider Memes
  4. URL:
    url
    https://mcp.insidermemes.com/mcp
  5. When Claude asks to authenticate, continue to Insider Memes, log in, and approve the requested access.
  6. Return to Claude and start a new chat with the Insider Memes connector enabled.
OAuth grants access only through the connector. You can revoke access by disconnecting the connector in Claude, and your paid-plan and credit limits still apply.

Use an API key for local MCP apps

Claude Desktop, Cursor, and other local MCP clients can also connect with a personal API key. Use this path when your MCP app does not support OAuth connectors yet.

  1. Log in at insidermemes.com.
  2. Go to profile settings and click Reveal API Key.
Keep your API key private. Anyone with it can use your account credits.

Claude Desktop with an API key

Claude Desktop needs a small local bridge so your personal API key is sent securely with each request. Replace YOUR_API_KEY with the key from profile settings above.

  1. Install Claude Desktop and Node.js (for npx)
  2. Open ~/Library/Application Support/Claude/claude_desktop_config.json on Mac (or %APPDATA%\\Claude\\claude_desktop_config.json on Windows)
  3. Add the mcpServers block below (merge with any existing servers):
    json
    {
      "mcpServers": {
        "insider-memes": {
          "command": "npx",
          "args": [
            "-y",
            "mcp-remote",
            "https://mcp.insidermemes.com/mcp",
            "--header",
            "Authorization: Bearer YOUR_API_KEY"
          ]
        }
      }
    }
  4. Fully quit Claude (Cmd+Q on Mac), reopen, and start a new chat

Cursor & other MCP apps

In Cursor, open Settings → MCP (or edit ~/.cursor/mcp.json) and add a remote server with your API key in the headers. Replace YOUR_API_KEY with your key from profile settings.

json
{
  "mcpServers": {
    "insider-memes": {
      "url": "https://mcp.insidermemes.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Other MCP-compatible tools (Windsurf, Zed, etc.) follow a similar pattern: remote URL https://mcp.insidermemes.com/mcp plus Authorization: Bearer YOUR_API_KEY. If your app supports OAuth remote connectors, use the hosted connector URL without a static key instead.

Available tools

get_meme_templates — Browse the meme template library

NameOptionsDefaultDescription
typeimages, videos, allallFilter by media type
categoriescategory slugsalle.g. happy, sports, movie-tv
optionnew, trending, populartrendingSort order
limit1–10024How many templates to return

Example prompts: “Show me 10 trending image meme templates” · “Find happy category templates”

generate_meme — Generate memes from a text prompt

NameOptionsDefaultDescription
input_textany stringrequiredWhat the meme should be about
typeimages, videos, allimagesOutput media type
count1–126How many memes to generate

Example prompts: “Generate 4 image memes about deploys failing on Friday afternoon” · “Make 6 memes about Monday morning meetings”

Each meme comes back with a hosted media_url, a tagline, and credit usage info so you know what the batch cost.

Example conversation

You: Use Insider Memes to generate 3 image memes about coffee addiction.

Claude: [calls generate_meme with your prompt]

Claude: Here are 3 memes I generated (3 credits used, 47 remaining):

  1. “But first, coffee” — media_url
  2. “Don't talk to me yet” — media_url
  3. “This is fine” — media_url

Troubleshooting

IssueWhat to try
Connector not showingFully quit and restart your AI app; start a new chat
Access deniedConfirm you have a paid plan
Insufficient creditsAsk for fewer memes or add credits in your account
Auth errorsOn claude.ai web, disconnect and reconnect the connector so OAuth can run again. On Claude Desktop or Cursor, confirm your API key is in the config header.
Invalid API keyReveal a fresh key from profile settings
Generation failedMake sure your prompt is not empty; try a clearer description

Connect with your API key in Claude Desktop or Cursor, then ask in natural language. Insider Memes handles templates, generation, credits, and hosting behind the scenes. For direct HTTP integration, see the Endpoints section below.

Endpoints

Below is the full API reference. Each endpoint includes a request body section (parameters and example input) followed by a response body section with example output.

POST
/v1/api/token/

Auth: JWT (Bearer)

Create or retrieve API token

DELETE
/v1/api/token/

Auth: JWT (Bearer)

Revoke API token

GET
/v1/templates/

Auth: Token or JWT

List templates with filters

GET
/v1/categories/

Auth: Token or JWT

List template categories

POST
/v1/generate/

Auth: Token or JWT

Generate memes from a prompt

Manage API Key

Create or revoke your API key. Most developers should use profile settings instead of calling these directly.

POST
/v1/api/token/

Create or retrieve your API token. Each user has one token — calling POST again returns the existing token. Requires JWT (Bearer) auth.

Authorization: Bearer <jwt-access-token>

Request body

No request body required.

Response body

Example output

json
{
  "token": "9944b09199c62bcf9418ad846aa0e4edf6d1",
  "created": "2026-06-05T12:00:00Z"
}
DELETE
/v1/api/token

Revoke your current API token. Returns 204 No Content. Call POST /v1/api/token again to create a new token.

Authorization: Bearer <jwt-access-token>

Request body

No request body required.

Response body

Returns 204 No Content with an empty body.

List Templates

Browse our public meme template library. Use this to discover templates before generating, build a template picker in your app, or pull assets for a specific mood or category.

GET
/v1/templates/

Returns a cursor-paginated list of meme templates. Filter by type, category, or search term, and sort by what is new, trending, or popular.

Authorization: Token <api-token>

Request body

Query parameters

typestring

Template media type: image, images, video, or videos. If omitted, both images and videos are returned.

categoriesstring

Filter by category slug. Comma-separated (e.g. happy,sports). Alias: category

sortstring

Sort order: new (default), trending, or popular

optionstring

Alias for sort

searchstring

Search title, description, keywords, and slug

limitinteger

Page size, 1–100. Default: 24

cursorstring

Opaque cursor returned by a previous response

Example request

bash
curl "https://backend.insidermemes.com/v1/templates/?type=images&categories=happy,sports&option=trending&limit=24" \
  -H "Authorization: Token <api-token>"

Response body

Example output

json
{
  "data": [
    {
      "id": "6ba7b811-9dad-11d1-80b4-00c04fd430c8",
      "name": "Drake Pointing",
      "type": "image",
      "categories": ["happy", "sports"],
      "imageUrl": "https://...",
      "thumbnailUrl": "https://...",
      "previewUrl": null,
      "addedAt": "2026-05-01T00:00:00Z"
    }
  ],
  "nextCursor": "eyJvZmZzZXQ6MjQifQ=="
}
  • Use GET /v1/categories/ to fetch available category slugs for filter UI.
  • Each template id is a UUID string. Responses use camelCase JSON keys.
  • Free plan: first page only, no search or filters. Using search, type, categories, sort, option, or cursor returns 403 Forbidden.
  • Paid plan: full filtering, search, and cursor pagination.
  • For video templates, type is "video" and previewUrl points to the video file. Image templates leave previewUrl as null.
  • Pass nextCursor from the response to fetch the next page. Omitted on the last page.

List Categories

Fetch available template categories for building filter UI in your app. Category slugs are used with the categories query parameter on /v1/templates/.

GET
/v1/categories/

Returns all template categories with slug and display name.

Authorization: Token <api-token>

Request body

Example request

bash
curl "https://backend.insidermemes.com/v1/categories/" \
  -H "Authorization: Token <api-token>"

Response body

Example output

json
{
  "data": [
    { "slug": "happy", "name": "Happy" },
    { "slug": "frustration", "name": "Frustration" },
    { "slug": "movie-tv", "name": "Movie/TV" }
  ]
}

Generate Memes

Turn a short idea into finished memes. Describe the situation or joke you want — our AI picks matching templates and writes captions for you. You get back direct file URLs you can download or embed right away.

POST
/v1/generate/

Creates one or more memes from your text prompt. Cost is 1 credit per returned meme. Default batch size is 6 if count is omitted. Count must be between 1 and 12.

Authorization: Token <api-token>

Request body

Fields

text*string

Meme prompt / description. Alias: description. An empty prompt may fail keyword extraction and return 400 Bad Request.

mediaTypestring

Template media type: image, images, video, videos, or all. Omit or use "all" for mixed image + video templates (~50/50). Use "image"/"images" for images only; "video"/"videos" for videos only.

countinteger

Memes to generate, 1–12. Default: 6. Aliases: memesCount, memes_count.

Example input

json
{
  "text": "When the deploy fails on Friday afternoon",
  "count": 3
}

Example request

bash
curl -X POST "https://backend.insidermemes.com/v1/generate/" \
  -H "Authorization: Token <api-token>" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "When the deploy fails on Friday afternoon",
    "count": 3
  }'

Response body

Example output

json
{
  "memes": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "tagline": "Me pretending everything is fine",
      "description": "When the deploy fails on Friday afternoon",
      "file": "https://example.com/meme.png",
      "template": "6ba7b811-9dad-11d1-80b4-00c04fd430c8",
      "type": "image",
      "templateFileUrl": "https://example.com/template.jpg",
      "createdAt": "2026-06-05T10:47:46.445474Z",
      "fontSize": 25,
      "textAlign": "center"
    },
    {
      "id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
      "tagline": "Friday deploys be like",
      "description": "When the deploy fails on Friday afternoon",
      "file": "",
      "template": "7ca8c922-0ebe-22e2-91c5-11d15fe541d9",
      "type": "video",
      "templateFileUrl": "https://example.com/template.mp4",
      "createdAt": "2026-06-05T10:47:46.445474Z",
      "jobInfo": {
        "jobId": "abc123-def456",
        "queue": "default",
        "estimatedTime": "2-5 minutes"
      }
    }
  ],
  "requestedCount": 3,
  "returnedCount": 2,
  "creditsUsed": 2,
  "creditsRemaining": 47.0,
  "creditCostPerMeme": 1
}
  • mediaType: omitted or "all" → mixed image and video templates (~50/50); "image"/"images" → images only; "video"/"videos" → videos only. When no specific type is set, template selection uses mixed-type logic (roughly half images, half videos).
  • Cost is 1 credit per returned meme.
  • Default batch size is 6 if count is omitted. Count must be between 1 and 12 (inclusive).
  • returnedCount may be less than requestedCount. You are only charged for memes that are successfully generated and returned.

Error Responses

When something goes wrong, the API returns a JSON body with an error message and an HTTP status code. Here are the most common ones and what they mean in practice.

401
Invalid or missing API key

Your API key is missing, incorrect, or has been revoked. Double-check the Authorization header and make sure you copied the full key from profile settings.

Response body

Example output

json
{
  "detail": "Invalid token."
}
403
Templates (free plan)

You tried to search, filter, or use cursor pagination on a free plan. Upgrade to a paid plan for full library access, or remove filters and request only the first page.

Response body

Example output

json
{
  "error": "Access denied. You need to subscribe to a paid package to access templates."
}
403
Library plan

Your plan includes template browsing but not meme generation. Upgrade to a plan with generator access to use the /v1/generate/ endpoint.

Response body

Example output

json
{
  "error": "Upgrade required",
  "message": "You're on the Library plan. Upgrade to access full tools."
}
402
Insufficient credits

You do not have enough credits for the requested batch. Lower the count value or purchase more credits, then try again. The response tells you exactly how many credits you need vs. have.

Response body

Example output

json
{
  "error": "Insufficient credits",
  "message": "You need 3 credit(s) to generate memes. You currently have 1 credit(s).",
  "requiredCredits": 3,
  "currentCredits": 1.0
}
403
Video not allowed

Video or mixed meme generation requires a paid plan with video access. This applies when mediaType is omitted, "all", "video", or "videos". Use mediaType: "images" for image-only generation, or upgrade to a plan with video access.

Response body

Example output

json
{
  "error": "Premium features require paid plan",
  "message": "Video and All Type meme generation are premium features! Upgrade to a paid plan to unlock these advanced options and create even more engaging content."
}
400
Generation failed

Meme generation failed — for example, an empty text prompt that could not be processed, or an invalid mediaType value.

Response body

Example output

json
{
  "error": "Error generating memes"
}
400
Invalid count

The count value is outside the allowed range. Use a value between 1 and 12.

Response body

Example output

json
{
  "error": "Invalid count",
  "message": "Count must be between 1 and 12.",
  "minCount": 1,
  "maxCount": 12
}