Giphy API
This is a community listing. If you own this API, you can request ownership.
npm install omnistream-sdkimport { OmniClient } from "omnistream-sdk";
const omni = new OmniClient({ token: process.env.OMNI_KEY! });
// One key reaches every API on the marketplace.
const data = await omni.call("giphy/getGifsById");One install, one key - the same client calls every API on the marketplace.
Get GIFs by ID
Random GIF
Search GIFs
Translate phrase to GIF
Trending GIFs
Get GIF by Id
Random Sticker
/**
* Giphy - generated by OmniStream from Giphy's OpenAPI spec.
* One typed method per endpoint. A single Omni key reaches the API.
*/
const DEFAULT_BASE = "https://grid.skinvaults.online/v1/proxy/giphy";
export class GiphyError extends Error {
status: number;
code?: string;
constructor(status: number, code: string | undefined, message?: string) {
super(message || `Giphy error ${status}`);
this.name = "GiphyError";
this.status = status;
this.code = code;
}
}
export interface GiphyOptions {
baseUrl?: string;
fetch?: typeof fetch;
timeoutMs?: number;
}
export class Giphy {
/** @param token Your OmniStream key (one key for every API). */
constructor(private token: string, private opts: GiphyOptions = {}) {
if (!token) throw new Error("Giphy: token is required");
}
rateLimit: { remainingMinute?: number; remainingDay?: number } | null = null;
private async _request(method: string, path: string, { params, body }: { params?: Record<string, unknown>; body?: unknown } = {}): Promise<any> {
const f = this.opts.fetch ?? globalThis.fetch;
const url = new URL((this.opts.baseUrl ?? DEFAULT_BASE).replace(/\/+$/, "") + path);
if (params) for (const [k, v] of Object.entries(params)) if (v != null) url.searchParams.set(k, String(v));
const headers: Record<string, string> = { "x-omni-key": this.token };
if (body !== undefined) headers["content-type"] = "application/json";
const res = await f(url, { method, headers, body: body !== undefined ? JSON.stringify(body) : undefined });
this.rateLimit = {
remainingMinute: Number(res.headers.get("x-ratelimit-remaining-minute")) || undefined,
remainingDay: Number(res.headers.get("x-ratelimit-remaining-day")) || undefined,
};
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new GiphyError(res.status, data?.error?.code, data?.error?.message);
return data.data ?? data;
}
/** Get GIFs by ID */
getGifsById(params: { undefined?: string }): Promise<any> {
return this._request("GET", "/gifs", { params });
}
/** Random GIF */
randomGif(params: { undefined?: string; undefined?: string }): Promise<any> {
return this._request("GET", "/gifs/random", { params });
}
/** Search GIFs */
searchGifs(params: { undefined?: string; undefined?: string; undefined?: string; undefined?: string; undefined?: string }): Promise<any> {
return this._request("GET", "/gifs/search", { params });
}
/** Translate phrase to GIF */
translateGif(params: { undefined?: string }): Promise<any> {
return this._request("GET", "/gifs/translate", { params });
}
/** Trending GIFs */
trendingGifs(params: { undefined?: string; undefined?: string; undefined?: string }): Promise<any> {
return this._request("GET", "/gifs/trending", { params });
}
/** Get GIF by Id */
getGifById(params: { undefined?: string }): Promise<any> {
return this._request("GET", "/gifs/{gifId}", { params });
}
/** Random Sticker */
randomSticker(params: { undefined?: string; undefined?: string }): Promise<any> {
return this._request("GET", "/stickers/random", { params });
}
/** Search Stickers */
searchStickers(params: { undefined?: string; undefined?: string; undefined?: string; undefined?: string; undefined?: string }): Promise<any> {
return this._request("GET", "/stickers/search", { params });
}
/** Translate phrase to Sticker */
translateSticker(params: { undefined?: string }): Promise<any> {
return this._request("GET", "/stickers/translate", { params });
}
/** Trending Stickers */
trendingStickers(params: { undefined?: string; undefined?: string; undefined?: string }): Promise<any> {
return this._request("GET", "/stickers/trending", { params });
}
}
export default Giphy;
No reviews yet. Be the first to rate this API.
Search Stickers
Translate phrase to Sticker
Trending Stickers