Dribbble Shots API
A profile's shot tiles as JSON, with likes, views, dates and motion data, newest or popular.
GET /v1/dribbble/profiles/{handle}/shots1 credit Failed requests are free
About this endpoint
GET /v1/dribbble/profiles/{handle}/shots returns up to 24 shot tiles per page in data.shots. Each tile has id, slug, path, url, title, altText, thumbnailUrl, dominantColor, isMotion, isRebound, animatedUrl, videoUrl, hasAttachments, reboundCount, likesCount, viewsText, viewsEstimate, viewsApproximate and publishedAt.
Set sort=recent (the default, pinned first then newest) or sort=popular for Dribbble's own popularity order. Page with page or with cursor from data.page.nextCursor, and stop when data.page.hasMore is false. A profile with no shots returns lookupStatus: found with an empty shots array. A page past the end of a profile is also a found page with an empty shots array. A tile without a metric returns null rather than a guessed number. publishedAt is null for a shot under a day old, where the tile shows only a relative time.
Dribbble Shots API FAQ
What does a profile with no shots return?
A found response with an empty shots array and data.page.hasMore false. It is not an error and not a missing profile.
Why is publishedAt null on a new shot?
A shot published in the last day shows only a relative time, so there is no dated value to return. Older shots carry a YYYY-MM-DD date.
What is the difference between recent and popular?
sort=recent returns the profile's default order, with pinned shots first and then the newest. sort=popular returns Dribbble's popularity order. Both use the same tile fields.
How do I page through all shots?
Request page 1, then keep the response's data.page.nextCursor and send it as cursor while data.page.hasMore is true. Pages stop at 100. A page past the end is found with an empty shots array.
Why are likesCount or viewsText null on some tiles?
Dribbble does not show every metric on every tile. A value is null when the tile has none, and viewsApproximate is true when the displayed views were a rounded k or m value.
How many credits does a shots page cost?
Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.
Other Dribbble endpoints
- ProfileGET /v1/dribbble/profiles/{handle}
- Team membersGET /v1/dribbble/profiles/{handle}/members
- ReviewsGET /v1/dribbble/profiles/{handle}/reviews
- Profile collectionsGET /v1/dribbble/profiles/{handle}/collections
- CollectionGET /v1/dribbble/profiles/{handle}/collections/{collectionId}
- Profile servicesGET /v1/dribbble/profiles/{handle}/services
- ServiceGET /v1/dribbble/services/{serviceId}
- Search servicesGET /v1/dribbble/services/search