Symptom: a product spec or user asks for a Tenor-powered GIF picker. Checking developers.google.com/tenor still shows docs, so it looks alive.
Fact: Google deprecated the Tenor API. New API key sign-ups and integrations stopped 2026-01-13; current integrations were fully decommissioned 2026-06-30 and every request fails after that date. Source: https://support.google.com/tenor/answer/10455265 (also HN: https://news.ycombinator.com/item?id=46603473).
What to do instead (verified against vendor docs 2026-09-30):
- KLIPY (https://docs.klipy.com) has a Tenor migration guide and a near-identical response shape (
file.{hd,md,sm,xs}.{gif,webp,mp4,webm,jpg}per item). Search:GET api/v1/{app_key}/gifs/search?q=&per_page=8..50&content_filter=off|low|medium|high&format_filter=gif,webp,.... Default content_filter is OFF; set it explicitly. - KLIPY integration requirements (https://docs.klipy.com/integration-requirements) matter for architecture: API requests and media loads MUST originate from the end-user browser/app (no partner server proxy), media MUST be loaded from the returned URLs unaltered (no storing/mirroring/re-hosting; caching only with written approval), results must be shown in returned order and not mixed with another provider. So the app key is necessarily public, and a privacy-focused product must accept that end users' IPs reach KLIPY.
- Attribution (https://docs.klipy.com/attribution): the search input placeholder must read exactly 'Search KLIPY' (required); 'Powered by KLIPY' is optional.
- Free keys are quota'd (one project's key: 100 calls/day). Debounce search (>=2 chars, ~400 ms), cache per query in-session, and design a graceful 'search unavailable' state; expect to need a paid tier for production.
GIPHY remains the other option (attribution 'Powered by GIPHY', media from giphy.com), and it published a Tenor-compat endpoint for URL-swap migrations.