---
title: "Create meme from message"
method: POST
path: "/channels/{channel_id}/messages/{message_id}/memes"
tags: ["Saved Media"]
---

# Create meme from message

`POST /channels/{channel_id}/messages/{message_id}/memes`

Saves a message attachment as a favorite meme.

## Path parameters

- `channel_id` union, required
  - string, snowflake
  - integer
- `message_id` union, required
  - string, snowflake
  - integer

## Request body

- CreateFavoriteMemeBodySchema
  - `name` string, required — Display name for the meme
  - `alt_text` string, nullable — Alternative text description for accessibility
  - `tags` string[], nullable — Tags for categorizing and searching the meme
  - `attachment_id` union
    - string, snowflake
    - integer
  - `embed_index` integer, nullable — Index of the message embed to save as a meme

## Response `201`

Success

- FavoriteMemeResponse
  - `id` string, snowflake, required
  - `user_id` string, snowflake, required
  - `name` string, required — Display name of the meme
  - `alt_text` string, nullable — Alternative text description for accessibility
  - `tags` string[], required — Tags for categorizing and searching the meme
  - `attachment_id` string, snowflake, required
  - `filename` string, required — Original filename of the meme
  - `content_type` string, required — MIME type of the meme file
  - `content_hash` string, nullable — Hash of the file content for deduplication
  - `size` integer, required
  - `width` integer, nullable — Width of the image or video in pixels
  - `height` integer, nullable — Height of the image or video in pixels
  - `duration` number, nullable — Duration of the video in seconds
  - `url` string, required — CDN URL to access the meme
  - `is_gifv` boolean, required — Whether the meme is a video converted from GIF
  - `gif_slug` string, nullable — Provider-issued slug for the GIF this meme was sourced from, if any
  - `gif_provider` string, nullable — Stable name of the GIF provider that issued gif_slug, if any. Legacy records may contain older provider names.
  - `media` object, nullable — Provider-issued format-name → media descriptor map for gif-sourced memes (mirrors GifResponse.media). Null on memes uploaded as plain attachments.
  - `placeholder` string, nullable — Compact thumbhash placeholder produced by the media proxy at favorite-time. Clients render it as a low-res preview while the full media loads. Null when the proxy did not emit one.

## Other responses

- `400` — Bad Request - The request was malformed or contained invalid data
- `401` — Unauthorized - Authentication is required or the token is invalid
- `403` — Forbidden - You do not have permission to perform this action
- `429` — Too Many Requests - You are being rate limited
- `500` — Internal Server Error - An unexpected error occurred

## Changes

> 16 revisions in range; 1 not diffed.

- **2026-09-18** `dd0ad4ea1c88` — 7 breaking, 7 info
  - request property `alt_text` list-of-types was narrowed by removing types `null` from media type `application/json`
  - the response property `alt_text` became nullable for the status `201`
  - the response property `content_hash` became nullable for the status `201`
  - the response property `duration` became nullable for the status `201`
  - …10 more
- **2026-09-06** `a52a2cf49d9b` — 32 warning, 200 info
  - added the new `IP_BAN_DECLINED` enum value to the `code` response property for the response status `400`
  - added the new `IP_BAN_DECLINED` enum value to the `code` response property for the response status `401`
  - added the new `IP_BAN_DECLINED` enum value to the `code` response property for the response status `403`
  - added the new `IP_BAN_DECLINED` enum value to the `code` response property for the response status `500`
  - …228 more
  - …this revision’s changelog is incomplete
- …earlier changes not shown

[Full history](https://skmtc.dev/fluxer/apis/fluxer-api/changes/channels/:channel_id/messages/:message_id/memes/post.md)

---

[API](https://skmtc.dev/fluxer/apis/fluxer-api.md) · [All operations](https://skmtc.dev/fluxer/apis/fluxer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fluxer/apis/fluxer-api/revisions/034cfc3e79b4?raw)
