Register an application at unsplash.com/developers; development apps are rate-limited to 50 requests/hour; submit for production approval to get higher limits.
Search photos by GETting https://api.unsplash.com/search/photos?query={query}&per_page={n} with Authorization: Client-ID {access_key} header; the response includes an array of photo objects.
Each photo object contains urls.raw, urls.full, urls.regular, urls.small, and urls.thumb — use the appropriate size for your context.
When a user triggers a download (e.g., clicks a download button or your app uses the full-resolution image), trigger the download endpoint by GETting the download_location URL from the photo object; this is required by the Unsplash API Guidelines to credit photographers.
Display photographer attribution (name and a link to their Unsplash profile) wherever their photos appear; this is required by Unsplash API Guidelines.
Known gotchas
Calling the download_location endpoint when a photo is downloaded (not just viewed) is a hard requirement of the Unsplash API Guidelines, not optional; skipping this step violates the guidelines and risks API access termination.
Hotlinking to Unsplash CDN URLs (using the image src directly from the API response) is permitted for display purposes, but images should not be served to end users as if they are self-hosted or attribution-free assets.
Production apps must apply for production access; remaining on the development key in a live app violates the Terms of Service and the 50 requests/hour limit will cause failures immediately under real user traffic.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp