Unsplash

# Unsplash API Search, browse, and download high-quality free photos from Unsplash's library of millions of images. ## Setup & Authentication ### Get your Access Key 1. Create account at https://unsplash.com/developers 2. Register a new application 3. Copy your **Access Key** (starts with your app name) ### Store credentials ```bash mkdir -p ~/.config/unsplash echo "YOUR_ACCESS_KEY" > ~/.config/unsplash/access_key chmod 600 ~/.config/unsplash/access_key ``` Or set environment variable: ```bash export UNSPLASH_ACCESS_KEY="your_access_key_here" ``` ### Rate Limits - **Demo**: 50 requests/hour - **Production**: 5,000 requests/hour (after app approval) - Only `/v1/messages` endpoints count; image URLs (`images.unsplash.com`) don't ## Common Operations ### Search Photos ```bash curl "https://api.unsplash.com/search/photos?query=nature&per_page=10" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" ``` **Parameters:** - `query`: Search terms (required) - `page`: Page number (default: 1) - `per_page`: Results per page (default: 10, max: 30) - `order_by`: `relevant` (default) or `latest` - `color`: Filter by color (`black_and_white`, `black`, `white`, `yellow`, `orange`, `red`, `purple`, `magenta`, `green`, `teal`, `blue`) - `orientation`: `landscape`, `portrait`, or `squarish` ### Get Random Photo ```bash curl "https://api.unsplash.com/photos/random?query=coffee&count=1" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" ``` **Parameters:** - `query`: Limit to search term (optional) - `count`: Number of photos (1-30, default: 1) - `orientation`: Filter by orientation - `collections`: Filter by collection IDs (comma-separated) ### Get Photo Details ```bash curl "https://api.unsplash.com/photos/PHOTO_ID" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" ``` Returns full photo metadata including EXIF, location, user info, and all image URLs. ### Track Download (Required!) **Important:** You MUST trigger this endpoint when downloading a photo to comply with API guidelines. ```bash curl "https://api.unsplash.com/photos/PHOTO_ID/download" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" ``` This increments the download counter. Response includes the download URL. ### List Editorial Feed ```bash curl "https://api.unsplash.com/photos?per_page=10" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" ``` ### Browse Collections ```bash # List all collections curl "https://api.unsplash.com/collections?per_page=10" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" # Get collection photos curl "https://api.unsplash.com/collections/COLLECTION_ID/photos" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" ``` ### User Photos ```bash curl "https://api.unsplash.com/users/USERNAME/photos?per_page=10" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" ``` ## Working with Images ### Image URLs Every photo response includes these URLs: ```json { "urls": { "raw": "https://images.unsplash.com/photo-xxx?ixid=xxx", "full": "...?ixid=xxx&q=80&fm=jpg", "regular": "...?ixid=xxx&w=1080&fit=max", "small": "...?w=400&fit=max", "thumb": "...?w=200&fit=max" } } ``` ### Dynamic Resizing Add parameters to any image URL (keep the `ixid` parameter!): - `w=1500`: Set width - `h=800`: Set height - `dpr=2`: Device pixel ratio - `q=75`: Quality (1-100) - `fm=jpg`: Format (jpg, png, webp, avif) - `fit=crop`: Fit mode (crop, max, clip) - `crop=entropy`: Crop mode **Example:** ``` https://images.unsplash.com/photo-xxx?ixid=xxx&w=1500&h=1000&fit=crop&q=85 ``` ### BlurHash Placeholders Each photo includes a `blur_hash` field - a compact string representation for showing blurred placeholders while images load. ```json { "blur_hash": "LoC%a7IoIVxZ_NM|M{s:%hRjWAo0" } ``` ## Response Structure ### Photo Object (abbreviated) ```json { "id": "LBI7cgq3pbM", "created_at": "2016-05-03T11:00:28-04:00", "width": 5245, "height": 3497, "color": "#60544D", "blur_hash": "LoC%a7IoIVxZ_NM|M{s:%hRjWAo0", "description": "A man drinking coffee", "urls": { "raw": "...", "full": "...", "regular": "..." }, "links": { "download": "...", "download_location": "https://api.unsplash.com/photos/xxx/download" }, "user": { "username": "johndoe", "name": "John Doe", "profile_image": { "small": "...", "medium": "...", "large": "..." } } } ``` ### Search Response ```json { "total": 133, "total_pages": 7, "results": [ /* array of photo objects */ ] } ``` ## Best Practices ### Attribution Always attribute photos to their creators: ``` Photo by [Name] on Unsplash ``` Link to photographer's Unsplash profile when possible. ### Download Tracking - Call `/photos/:id/download` before allowing users to download - This is required by Unsplash API Guidelines - Don't use it for just displaying images (that's tracked automatically via hotlinking) ### Hotlinking - You can hotlink images directly from `images.unsplash.com` - These don't count against rate limits - Views are tracked automatically - Always keep the `ixid` parameter in URLs ### Caching - Public endpoints (search, photos) are cacheable - Consider caching search results client-side to reduce API calls ## Quick Reference ```bash # Store key export UNSPLASH_ACCESS_KEY="your_key" # Search curl "https://api.unsplash.com/search/photos?query=ocean&per_page=5" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" # Random photo curl "https://api.unsplash.com/photos/random?query=mountains" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" # Get photo curl "https://api.unsplash.com/photos/PHOTO_ID" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" # Track download (required when downloading!) curl "https://api.unsplash.com/photos/PHOTO_ID/download" \ -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}" ``` ## Notes - Base URL: `https://api.unsplash.com` - All responses are JSON - Pagination via `page` and `per_page` parameters - Link headers provide first/prev/next/last page URLs - Image requests to `images.unsplash.com` don't count against rate limits - Keep the `ixid` parameter when using/manipulating image URLs - For production use, apply for increased rate limits in your dashboard ## Common Filters ### Colors `black_and_white`, `black`, `white`, `yellow`, `orange`, `red`, `purple`, `magenta`, `green`, `teal`, `blue` ### Orientations `landscape`, `portrait`, `squarish` ### Sort Options - Photos: `latest`, `oldest`, `popular` - Search: `relevant`, `latest` ## Error Handling - `401 Unauthorized`: Invalid or missing access key - `403 Forbidden`: Rate limit exceeded or forbidden action - `404 Not Found`: Photo/user/collection doesn't exist Check `X-Ratelimit-Remaining` header to monitor your rate limit status.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "Unsplash" with this command: npx skills add Brokenwatch24/unsplash

Unsplash API

Search, browse, and download high-quality free photos from Unsplash's library of millions of images.

Setup & Authentication

Get your Access Key

  1. Create account at https://unsplash.com/developers
  2. Register a new application
  3. Copy your Access Key (starts with your app name)

Store credentials

mkdir -p ~/.config/unsplash
echo "YOUR_ACCESS_KEY" > ~/.config/unsplash/access_key
chmod 600 ~/.config/unsplash/access_key

Or set environment variable:

export UNSPLASH_ACCESS_KEY="your_access_key_here"

Rate Limits

  • Demo: 50 requests/hour
  • Production: 5,000 requests/hour (after app approval)
  • Only /v1/messages endpoints count; image URLs (images.unsplash.com) don't

Common Operations

Search Photos

curl "https://api.unsplash.com/search/photos?query=nature&per_page=10" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

Parameters:

  • query: Search terms (required)
  • page: Page number (default: 1)
  • per_page: Results per page (default: 10, max: 30)
  • order_by: relevant (default) or latest
  • color: Filter by color (black_and_white, black, white, yellow, orange, red, purple, magenta, green, teal, blue)
  • orientation: landscape, portrait, or squarish

Get Random Photo

curl "https://api.unsplash.com/photos/random?query=coffee&count=1" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

Parameters:

  • query: Limit to search term (optional)
  • count: Number of photos (1-30, default: 1)
  • orientation: Filter by orientation
  • collections: Filter by collection IDs (comma-separated)

Get Photo Details

curl "https://api.unsplash.com/photos/PHOTO_ID" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

Returns full photo metadata including EXIF, location, user info, and all image URLs.

Track Download (Required!)

Important: You MUST trigger this endpoint when downloading a photo to comply with API guidelines.

curl "https://api.unsplash.com/photos/PHOTO_ID/download" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

This increments the download counter. Response includes the download URL.

List Editorial Feed

curl "https://api.unsplash.com/photos?per_page=10" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

Browse Collections

# List all collections
curl "https://api.unsplash.com/collections?per_page=10" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

# Get collection photos
curl "https://api.unsplash.com/collections/COLLECTION_ID/photos" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

User Photos

curl "https://api.unsplash.com/users/USERNAME/photos?per_page=10" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

Working with Images

Image URLs

Every photo response includes these URLs:

{
  "urls": {
    "raw": "https://images.unsplash.com/photo-xxx?ixid=xxx",
    "full": "...?ixid=xxx&q=80&fm=jpg",
    "regular": "...?ixid=xxx&w=1080&fit=max",
    "small": "...?w=400&fit=max",
    "thumb": "...?w=200&fit=max"
  }
}

Dynamic Resizing

Add parameters to any image URL (keep the ixid parameter!):

  • w=1500: Set width
  • h=800: Set height
  • dpr=2: Device pixel ratio
  • q=75: Quality (1-100)
  • fm=jpg: Format (jpg, png, webp, avif)
  • fit=crop: Fit mode (crop, max, clip)
  • crop=entropy: Crop mode

Example:

https://images.unsplash.com/photo-xxx?ixid=xxx&w=1500&h=1000&fit=crop&q=85

BlurHash Placeholders

Each photo includes a blur_hash field - a compact string representation for showing blurred placeholders while images load.

{
  "blur_hash": "LoC%a7IoIVxZ_NM|M{s:%hRjWAo0"
}

Response Structure

Photo Object (abbreviated)

{
  "id": "LBI7cgq3pbM",
  "created_at": "2016-05-03T11:00:28-04:00",
  "width": 5245,
  "height": 3497,
  "color": "#60544D",
  "blur_hash": "LoC%a7IoIVxZ_NM|M{s:%hRjWAo0",
  "description": "A man drinking coffee",
  "urls": { "raw": "...", "full": "...", "regular": "..." },
  "links": {
    "download": "...",
    "download_location": "https://api.unsplash.com/photos/xxx/download"
  },
  "user": {
    "username": "johndoe",
    "name": "John Doe",
    "profile_image": { "small": "...", "medium": "...", "large": "..." }
  }
}

Search Response

{
  "total": 133,
  "total_pages": 7,
  "results": [ /* array of photo objects */ ]
}

Best Practices

Attribution

Always attribute photos to their creators:

Photo by [Name] on Unsplash

Link to photographer's Unsplash profile when possible.

Download Tracking

  • Call /photos/:id/download before allowing users to download
  • This is required by Unsplash API Guidelines
  • Don't use it for just displaying images (that's tracked automatically via hotlinking)

Hotlinking

  • You can hotlink images directly from images.unsplash.com
  • These don't count against rate limits
  • Views are tracked automatically
  • Always keep the ixid parameter in URLs

Caching

  • Public endpoints (search, photos) are cacheable
  • Consider caching search results client-side to reduce API calls

Quick Reference

# Store key
export UNSPLASH_ACCESS_KEY="your_key"

# Search
curl "https://api.unsplash.com/search/photos?query=ocean&per_page=5" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

# Random photo
curl "https://api.unsplash.com/photos/random?query=mountains" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

# Get photo
curl "https://api.unsplash.com/photos/PHOTO_ID" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

# Track download (required when downloading!)
curl "https://api.unsplash.com/photos/PHOTO_ID/download" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

Notes

  • Base URL: https://api.unsplash.com
  • All responses are JSON
  • Pagination via page and per_page parameters
  • Link headers provide first/prev/next/last page URLs
  • Image requests to images.unsplash.com don't count against rate limits
  • Keep the ixid parameter when using/manipulating image URLs
  • For production use, apply for increased rate limits in your dashboard

Common Filters

Colors

black_and_white, black, white, yellow, orange, red, purple, magenta, green, teal, blue

Orientations

landscape, portrait, squarish

Sort Options

  • Photos: latest, oldest, popular
  • Search: relevant, latest

Error Handling

  • 401 Unauthorized: Invalid or missing access key
  • 403 Forbidden: Rate limit exceeded or forbidden action
  • 404 Not Found: Photo/user/collection doesn't exist

Check X-Ratelimit-Remaining header to monitor your rate limit status.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

baidu-search

Comprehensive search API integration for Baidu Qianfan Web Search. Use when Claude needs to perform web searches using Baidu Qianfan's enterprise search API....

Registry SourceRecently Updated
General

Self Memory Manager

管理 Claude 的记忆和工作流程优化。包括:(1) Context 使用管理 (2) 重要信息存档 (3) 定时总结 (4) 工作文件夹维护 用于:context 超过 80%、重要信息需要记录、每日总结、清理旧 session

Registry SourceRecently Updated
General

Seedance Video

Generate AI videos using ByteDance Seedance. Use when the user wants to: (1) generate videos from text prompts, (2) generate videos from images (first frame,...

Registry SourceRecently Updated