---
title: "Store a rendered meme and return canonical share/image URLs"
method: POST
path: "/api/memes"
tags: ["memes"]
---

# Store a rendered meme and return canonical share/image URLs

`POST /api/memes`

## Headers

- `Idempotency-Key` string

## Request body

- union
  - unknown
  - unknown

## Response `201`

Meme stored

- CreateMemeResponse
  - `slug` string, required
  - `shareSlug` string, required
  - `shareUrl` string, required
  - `imageUrl` string, required
  - `canonicalImageUrl` string, required
  - `altText` string, required
  - `tags` string[], required
  - `ownerToken` string, required
  - `visibility` 'public' | 'private', required
  - `guestSessionId` string, nullable, required

## Other responses

- `400` — Validation error
- `401` — Authenticated user or valid guest publish session required
- `403` — Origin validation or upload ownership failed
- `409` — Typed idempotency payload conflict or request in progress
- `422` — Validation blocked by content policy or unchanged template clone
- `429` — Rate limit exceeded

---

[API](https://skmtc.net/memesio/apis/memesio-api-contracts.md) · [All operations](https://skmtc.net/memesio/apis/memesio-api-contracts/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/memesio/memesio-api-contracts/revisions/826e6edbf294/schema)
