---
title: "Render an approved GIF template and return JSON metadata with optional base64 output"
method: POST
path: "/api/v1/gifs/generate"
tags: ["developer-api", "gifs"]
---

# Render an approved GIF template and return JSON metadata with optional base64 output

`POST /api/v1/gifs/generate`

Accepts gifSlug plus width, startMs, durationMs, fps, title, tags, and caption objects with x/y/fontSize placement. Set returnBase64=true when the client needs a data URL.

## Request body

- GenerateGifRequest
  - `gifSlug` string — Required for /api/v1/gifs/generate.
  - `widthPx` integer
  - `startMs` integer
  - `durationMs` integer
  - `fps` integer
  - `title` string
  - `tags` string[]
  - `captions` GifCaptionInput[]
    - `id` string
    - `text` string, required
    - `x` number
    - `y` number
    - `fontSize` number
    - `boxWidthPct` number
    - `maxLines` integer
    - `color` string
    - `stroke` string
    - `textAlign` 'left' | 'center' | 'right'
    - `fontFamily` 'impact' | 'arial' | 'poster'
  - `returnBase64` boolean — Only used by /api/v1/gifs/generate.

## Response `200`

Generated GIF metadata

- GenerateGifResponse
  - `ok` true, required
  - `data` object, required
    - `gifSlug` string, required
    - `title` string
    - `filename` string, required
    - `mimeType` 'image/gif', required
    - `byteLength` integer, required
    - `width` integer, required
    - `height` integer, required
    - `pages` integer, required
    - `delayMs` integer, required
    - `sourceDurationMs` integer, required
    - `parameters` GenerateGifRequest, required
      - `gifSlug` string — Required for /api/v1/gifs/generate.
      - `widthPx` integer
      - `startMs` integer
      - `durationMs` integer
      - `fps` integer
      - `title` string
      - `tags` string[]
      - `captions` GifCaptionInput[]
        - `id` string
        - `text` string, required
        - `x` number
        - `y` number
        - `fontSize` number
        - `boxWidthPct` number
        - `maxLines` integer
        - `color` string
        - `stroke` string
        - `textAlign` 'left' | 'center' | 'right'
        - `fontFamily` 'impact' | 'arial' | 'poster'
      - `returnBase64` boolean — Only used by /api/v1/gifs/generate.
    - `base64` string
    - `dataUrl` string

## Other responses

- `400` — Validation error
- `404` — GIF template not found
- `413` — Source or output GIF too large
- `422` — Frame or pixel budget exceeded
- `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)
