Documentation

Move a Tenor integration to GifSnap

A practical migration guide for GIF search, pagination, and selected media. Adapt your existing UI or replace it with the React picker.

Google’s published schedule ended external Tenor API integrations on June 30, 2026, after closing new API key sign-ups on January 13. Tenor’s website and Google-owned integrations are separate from that shutdown. See Google’s Tenor API discontinuation notice.

Choose your integration path

If your app uses React, the GifSnap picker provides a search interface and an onSelect callback. To keep your existing interface, replace its search and response mapping with the GifSnap REST API.

GifSnap uses its own API contract. Plan to update request parameters, response handling, and pagination; existing Tenor IDs and parameters are not automatically interchangeable.

Map the pieces that change

IntegrationTenor APIGifSnap API
Search/v2/search/api/v1/gifs/search?q=hello
Authenticationkey and client_keyCurrent public endpoints accept requests without an API key.
Paginationpos / next cursorpage / limit, then pagination.next_page.
Selected mediaresults[].media_formatsdata[].url and preview_url, with dimensions and source metadata.

The Tenor columns describe its historical endpoint documentation and response objects.

Replace the search request

Start at page 1 for each new query. Request the next page only when the response says one is available, and keep the query and limit consistent.

Search with GifSnap
const url = new URL('https://gifsnap.com/api/v1/gifs/search');
url.searchParams.set('q', 'hello');
url.searchParams.set('page', '1');
url.searchParams.set('limit', '12');

const response = await fetch(url);
if (!response.ok) {
  throw new Error('GIF search failed: ' + response.status);
}
const result = await response.json();
const gifs = result.data;
const nextPage = result.pagination.next_page;

Normalize media for your UI

Translate the response into your application’s own attachment shape. Keep the returned URL unchanged and retain source metadata. Avoid constructing a media URL from an ID or assuming every image ends in .gif.

Application attachment
function toAttachment(gif) {
  return {
    id: gif.id,
    url: gif.url,
    previewUrl: gif.preview_url,
    alt: gif.title || 'Animated image',
    width: gif.width,
    height: gif.height,
    source: gif.source,
  };
}

Review behavior before switching

The public GifSnap API is currently best-effort, without a published SLA. Evaluate it against your app’s requirements, including media terms, moderation, and reliability.

Continue with the endpoint reference or try the live React picker.