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.
Map the pieces that change
| Integration | Tenor API | GifSnap API |
|---|---|---|
| Search | /v2/search | /api/v1/gifs/search?q=hello |
| Authentication | key and client_key | Current public endpoints accept requests without an API key. |
| Pagination | pos / next cursor | page / limit, then pagination.next_page. |
| Selected media | results[].media_formats | data[].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.
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.
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
- Test representative searches, empty results, failed requests, and unavailable media.
- Replace cursor state with page state, and reset it whenever the query changes.
- Review every provider-specific option your old integration sent. Only rely on parameters documented by GifSnap.
- Keep existing attachments separate from new search results; a provider change does not migrate saved media automatically.
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.