Get the Photos timeline
const url = 'https://example.com/api/v1/photos/timeline?filter=all';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://example.com/api/v1/photos/timeline?filter=all' \ --header 'Authorization: Bearer <token>'Requires a signed-in User. It returns days from newest to oldest, with item counts and a page of tiles. It accepts a date cursor, page limits, a filter for Videos or Stacks, and repeated tag values that require every selected Tag. Route: /api/v1/photos/timeline. Inputs: before, days, tiles_per_day, filter, tag. Safe reads can use bounded retries.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Which timeline groups a read returns. videos keeps groups whose display
item is a video; stacks keeps RAW+JPEG pairs, Live Photos and bursts.
Repeat tag to require every selected Tag (#1109, DESIGN §33).
Responses
Section titled “Responses”object
object
object
The display item’s Files path as the viewer addresses it: Home
relative, or Shared/<owner>/… for a shared library root.
Display size after EXIF orientation. Absent when the file does not say; the client then keeps a neutral aspect ratio.
Examplegenerated
{ "days": [ { "count": 1, "day": "example", "tiles": [ { "capture_seconds": 1, "group_id": "example", "hash": "example", "height": 1, "item_id": "example", "kind": "example", "member_count": 1, "mime": "example", "name": "example", "path": "example", "thumbhash": "example", "thumbnail_url": "example", "width": 1 } ] } ], "next_before": "example"}The standard API error response: { "error": { ... } }.
object
Example
{ "error": { "code": "bad_request" }}