Flickr hub

Flickr Photo Search API

One search across public photos, with the filters a photo catalogue actually needs.

GET /v1/flickr/photos/search

1 credit Failed requests are free

About this endpoint

GET /v1/flickr/photos/search searches public photos. It accepts query for free text, tags with tagMode (all or any), sort (relevance, date posted, date taken or interestingness), license ids, media (photos or videos), upload and taken date ranges, userId, hasGeo, latitude and longitude with a radius, and paging.

Each row is a full photo record with owner, sizes, counts, dates, tags and geo coordinates; the place hierarchy is on GET /v1/flickr/photos/{photoId}. Paging uses limit, page and page.nextCursor, with at most 100 rows a page and a reachable cap of 4,000 rows. A query that matches nothing returns lookupStatus: found with an empty list. Newest-first sorts move as photos are uploaded, so a walk can repeat a row; use uploadedFrom and uploadedTo for a stable walk. A date-only uploadedTo means 00:00 UTC. With takenFrom or takenTo, you get photos whose taken time falls in the window (edges included), read as the time dates.takenAt prints; pages can hold fewer rows than limit, so keep following page.nextCursor while hasMore is true, and page.totalItems is null. A date-only takenTo means 00:00; pass a full time such as 2024-01-31T23:59:59 to include the day. Taken bounds ignore any Z or offset.

Flickr Photo Search API FAQ

Can I combine free text and tags?

Yes. Use query for text and tags with tagMode to require every tag or any tag. The route passes both filters to the search.

How do I search one person’s photos?

Use GET /v1/flickr/users/{userId}/photos/search for a tag or text search inside one photostream.

How much does a search 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.

How deep can I page?

The route exposes at most 4,000 rows, 100 at a time. page.reachableItems reports the reachable count and page.nextCursor stops at the cap.

Can I filter by licence?

Yes. Pass comma-separated licence ids from 0 to 16, such as 0,4,7. A non-numeric id or one outside that range is a 400 before any lookup.