Search GIFs
Hybrid text and vector search over all GIFs. Rate limit 300 per 10 minutes per IP without auth, or the app's configured limit (default 300 per minute) when called with a bare app key.
Authorization
BearerAuth Pass a user session token (from /auth/login) or an app API key (gk_…).
In: header
Query Parameters
Search query (2–100 characters).
Max results. Clamped to 1–50.
Minimum vector similarity. Clamped to 0.4–1.0.
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/gifs/search?q=string"{ "query": "string", "items": [ { "id": "string", "name": "string", "description": "string", "url": "http://example.com", "mimeType": "image/webp", "sizeBytes": "204800", "width": 0, "height": 0, "thumbhash": "string", "userId": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "similarity": 0 } ]}{ "error": "string"}{ "error": "Too many requests", "retryAfterSec": 0}Public feed GET
Feed of all GIFs, newest first. Public. Two pagination modes: - **Cursor (recommended):** pass the `nextCursor` value from the previous response as `cursor`. Stable under concurrent uploads/deletes — pages never overlap or skip items. `total` and `page` are omitted in this mode. - **Page:** pass `page` (1-200). Simpler, but offset-based; item positions can shift between requests when the feed changes. Every response includes `nextCursor` for the item after the last one returned (`null` when the feed is exhausted), so clients can switch to cursor pagination after any page.
Get a GIF GET
Fetch a single GIF by ID. Public.