---
title: "Read one meme by opaque slug, public slug, or source slug"
method: GET
path: "/api/memes/{slug}"
tags: ["memes"]
---

# Read one meme by opaque slug, public slug, or source slug

`GET /api/memes/{slug}`

## Path parameters

- `slug` string, required

## Query parameters

- `ownerToken` string, uuid

## Response `200`

Meme details

- MemeDetailResponse
  - `slug` string, required
  - `shareSlug` string, required
  - `shareUrl` string, required
  - `title` string, required
  - `altText` string, required
  - `tags` string[], required
  - `templateSlug` string, required
  - `visibility` 'public' | 'private', required
  - `createdAt` string, date-time, required
  - `imageUrl` string, required
  - `canonicalImageUrl` string, required
  - `nsfwStatus` 'clear' | 'flagged', required
  - `shareViews` integer, required
  - `sourceImageUrl` string, required
  - `captions` MemeCaption[], required
    - `id` string, required
    - `text` string, required
    - `x` number, required
    - `y` number, required
    - `fontSize` number, required
    - `rotationDeg` number
    - `hidden` boolean
    - `locked` boolean
    - `boxWidthPct` number
    - `boxHeightPct` number
    - `paddingPct` number
    - `maxLines` integer
    - `lineHeight` number
    - `backgroundEnabled` boolean
    - `backgroundColor` string
    - `backgroundOpacity` number
    - `letterSpacingEm` number
    - `shadowStrength` number
    - `color` string
    - `stroke` string
    - `fontFamily` 'impact' | 'arial' | 'poster'
    - `textAlign` 'left' | 'center' | 'right'
    - `semanticRole` 'setup' | 'contrast' | 'punchline' | 'reaction' | 'label'
    - `preferredCase` 'uppercase' | 'sentence' | 'title' | 'preserve'
    - `exampleText` string
    - `recommendedWordsMin` integer
    - `recommendedWordsMax` integer
    - `recommendedCharsMin` integer
    - `recommendedCharsMax` integer
  - `overlays` MemeOverlayImage[], required
    - `id` string, required
    - `label` string, required
    - `imageUrl` string, required
    - `sourceImageUrl` string
    - `x` number, required
    - `y` number, required
    - `widthPercent` number, required
    - `rotationDeg` number, required
    - `opacity` number, required
    - `hidden` boolean
    - `locked` boolean
    - `flippedX` boolean
    - `backgroundRemoved` boolean
  - `canvas` MemeCanvasConfig, required
    - `aspectRatio` 'original' | '1:1' | '4:5' | '16:9', required
    - `focusX` number, required
    - `focusY` number, required
    - `zoomPercent` number, required
    - `crop` object, required
      - `x` number, required
      - `y` number, required
      - `width` number, required
      - `height` number, required
    - `spacing` object, required
    - `guides` object, required
    - `sourceAdjustments` object, required
    - `layerOrder` string[], required
    - `transform` object, required
  - `watermark` MemeWatermarkConfig, required
    - `enabled` boolean, required
    - `text` string, required
    - `position` 'top_left' | 'top_right' | 'bottom_left' | 'bottom_right', required
    - `scale` number, required
  - `document` MemePublishDocument, required
    - `schema` 'memesio.frontend-document', required
    - `version` 1, required
    - `source` object, required
      - `templateId` string, nullable, required
      - `templateSlug` string, required
      - `imageUrl` string, required
      - `width` number, nullable, required
      - `height` number, nullable, required
    - `padding` object, required
      - `top` number, required
      - `right` number, required
      - `bottom` number, required
      - `left` number, required
      - `color` string, required
    - `captions` object[], required
      - `id` string, required
      - `text` string, required
      - `x` number, required
      - `y` number, required
      - `width` number, required
      - `height` number, required
      - `rotation` number, required
      - `hidden` boolean, required
      - `locked` boolean, required
      - `style` object, required
        - `fontFamily` string, required
        - `fontSize` number, required
        - `fontWeight` union, required
          - string
          - number
        - `textTransform` 'none' | 'uppercase' | 'lowercase' | 'capitalize', required
        - `fill` string, required
        - `outline` string, required
        - `outlineWidth` number, required
        - `alignment` 'left' | 'center' | 'right', required
        - `lineHeight` number, required
        - `letterSpacing` number, required
        - `shadow` object, nullable, required
          - `color` string, required
          - `offsetX` number, required
          - `offsetY` number, required
          - `blur` number, required
      - `slot` object, required
        - `semanticRole` 'setup' | 'contrast' | 'punchline' | 'reaction' | 'label'
        - `preferredCase` 'uppercase' | 'sentence' | 'title' | 'preserve'
        - `exampleText` string
        - `recommendedWordsMin` integer
        - `recommendedWordsMax` integer
        - `recommendedCharsMin` integer
        - `recommendedCharsMax` integer
    - `stickers` object[], required
      - `id` string, required
      - `libraryId` string, nullable, required
      - `label` string, required
      - `imageUrl` string, required
      - `sourceImageUrl` string, nullable, required
      - `x` number, required
      - `y` number, required
      - `width` number, required
      - `height` number, required
      - `rotation` number, required
      - `opacity` number, required
      - `hidden` boolean, required
      - `locked` boolean, required
      - `crop` object, nullable, required
        - `focusX` number, required
        - `focusY` number, required
        - `zoomPercent` number, required
      - `source` object, required
        - `kind` 'library' | 'upload' | 'managed', required
        - `assetId` string, nullable, required
    - `layerOrder` string[], required
    - `viewport` MemeCanvasConfig, required
      - `aspectRatio` 'original' | '1:1' | '4:5' | '16:9', required
      - `focusX` number, required
      - `focusY` number, required
      - `zoomPercent` number, required
      - `crop` object, required
        - `x` number, required
        - `y` number, required
        - `width` number, required
        - `height` number, required
      - `spacing` object, required
      - `guides` object, required
      - `sourceAdjustments` object, required
      - `layerOrder` string[], required
      - `transform` object, required
    - `watermark` MemeWatermarkConfig, required
      - `enabled` boolean, required
      - `text` string, required
      - `position` 'top_left' | 'top_right' | 'bottom_left' | 'bottom_right', required
      - `scale` number, required

## Other responses

- `400` — Validation error
- `403` — Private meme requires owner token
- `404` — Meme not found
- `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)
