---
title: "Resolve GIF URLs to proxy entries"
method: POST
path: "/users/@me/favorite-gifs/resolve"
tags: ["Saved Media"]
---

# Resolve GIF URLs to proxy entries

`POST /users/@me/favorite-gifs/resolve`

Resolves a batch of GIF URLs into entries containing signed media proxy URLs, suitable for storing as URL-only favorite GIFs.

## Request body

- ResolveGifUrlsBodySchema
  - `urls` string[], required — GIF URLs to resolve into entries with proxy metadata

## Response `200`

Success

- ResolveGifUrlsResponse
  - `entries` ResolvedGifEntrySchema[], required — Resolved GIF entries with proxy metadata
    - `url` string, required — Original GIF URL
    - `proxy_url` string, required — Signed media proxy URL for the GIF
    - `width` integer, required — Width of the GIF in pixels (0 if unknown)
    - `height` integer, required — Height of the GIF in pixels (0 if unknown)
    - `media` object, required — Provider-issued format-name → media descriptor map (mirrors GifResponse.media). Empty when the URL is not recognizable as belonging to any registered GIF provider.
    - `content_type` string, required — MIME type of the primary media (top-level url). Empty string means "unknown / image/gif" — clients should treat it as image/gif for backward compat.
    - `placeholder` string, nullable — Compact thumbhash placeholder produced by the media proxy. Persisted with the favorite so the picker can show a low-res preview while the GIF loads, and a fallback if the source URL later disappears.

## 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

> 18 revisions in range; 1 not diffed.

- **2026-09-18** `dd0ad4ea1c88` — 1 breaking, 1 info
  - the response property `entries/items/placeholder` became nullable for the status `200`
  - response property `entries/items/placeholder` list-of-types was narrowed by removing types `null` from media type `application/json` of response `200`
- **2026-09-06** `a52a2cf49d9b` — 32 warning
  - 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`
  - …28 more
  - …this revision’s changelog is incomplete
- **2026-09-05** `4dbb738a3e22` — 4 info
  - removed the `NSFW_EMOJI_STICKER_BLOCKED` enum value from the `code` response property for the response status `400`
  - removed the `NSFW_EMOJI_STICKER_BLOCKED` enum value from the `code` response property for the response status `401`
  - removed the `NSFW_EMOJI_STICKER_BLOCKED` enum value from the `code` response property for the response status `403`
  - removed the `NSFW_EMOJI_STICKER_BLOCKED` enum value from the `code` response property for the response status `500`
- …earlier changes not shown

[Full history](https://skmtc.dev/fluxer/apis/fluxer-api/changes/users/@me/favorite-gifs/resolve/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/1ae25d65c617?raw)
