Skip to main content

Wallpapers REST API

A JSON REST API for searching, browsing, and downloading wallpapers. Get an API key from /developers.

Authentication

Pass your API key in one of two headers:

Authorization: Bearer YOUR_API_KEY
# or
X-API-Key: YOUR_API_KEY

Rate limits

Each key has a per-minute limit (default 60). Responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. Exceeding the limit returns HTTP 429.

Quick start

curl -H "Authorization: Bearer YOUR_API_KEY" \
  /api/public/v1/wallpapers?per_page=5

Endpoints

GET/api/public/v1/wallpapers

List wallpapers. Filters: category, orientation, is_premium, sort (newest|popular|trending), q, page, per_page.

GET/api/public/v1/wallpapers/:slug

Get a single wallpaper by slug.

GET/api/public/v1/wallpapers/:slug/download

Signed 10-minute download URL. Requires `download` scope.

GET/api/public/v1/search?q=

Text search across title & description.

POST/api/public/v1/ai-search

Semantic search. Body: { query, limit? }.

GET/api/public/v1/categories

List all categories.

GET/api/public/v1/categories/:slug

Category detail + wallpapers.

GET/api/public/v1/collections

Public collections.

GET/api/public/v1/collections/:slug

Collection detail + wallpapers.

GET/api/public/v1/trending?window=7d

Trending wallpapers (24h | 7d | 30d).

GET/api/public/v1/usage

Usage stats for the calling API key.

Response envelope

{
  "data": [ { "id": "...", "slug": "...", "title": "...", "preview_url": "...", "tags": ["..."], ... } ],
  "pagination": { "page": 1, "per_page": 24, "total": 128, "total_pages": 6, "has_more": true }
}

Errors

Errors return { "error": "message" } with an appropriate HTTP status: 401 (bad key), 403 (missing scope), 404 (not found), 429 (rate limit), 500 (server error).