Skip to content

Timeline API

Base URL: https://YOUR-SERVER/api. Send your API key in x-api-key where authentication is required. A key also needs the listed permission; your account's access rules still apply.

API guide · All endpoints · OpenAPI JSON

Get time bucket

GET /api/timeline/bucket

Retrieve a string of all asset ids in a given time bucket.

Authentication: API key. Permission: asset.read.

Parameters

NameWhereRequiredDescription
albumIdqueryNoFilter assets belonging to a specific album
assetTypequeryNoFilter assets by media type
bboxqueryNoBounding box coordinates as west,south,east,north (WGS84)
dateTypequeryNoDate source for timeline bucket grouping. Defaults to taken date.
isFavoritequeryNoFilter by favorite status (true for favorites only, false for non-favorites only)
isTrashedqueryNoFilter by trash status (true for trashed assets only, false for non-trashed only)
keyqueryNostring
lockReasonqueryNoWith visibility LOCKED only: return only assets locked for this reason. Requires an elevated session.
orderqueryNoSort order for assets within time buckets (ASC for oldest first, DESC for newest first)
orderByqueryNoDate to group and order assets by (takenAt for date taken, createdAt for date added to Frameleaf)
personIdqueryNoFilter assets containing a specific person (face recognition)
petIdqueryNoFilter assets in which the caller confirmed one of their own pets
slugqueryNostring
suppressedOnlyqueryNoReturn only suppressed content. Requires an elevated session.
tagIdqueryNoFilter assets with a specific tag
timeBucketqueryYesTime bucket identifier in YYYY-MM-DDT00:00:00.000Z format
userIdqueryNoFilter assets by specific user ID
visibilityqueryNoFilter by asset visibility status (ARCHIVE, TIMELINE, HIDDEN, LOCKED)
withCoordinatesqueryNoInclude location data in the response
withStackedqueryNoInclude stacked assets in the response. When true, only primary assets from stacks are returned.
Parameter types, defaults and constraints

Field definitions: AssetTypeEnum, TimeBucketDateType, AssetLockReason, AssetOrder, AssetOrderBy, AssetVisibility

[
  {
    "name": "albumId",
    "required": false,
    "in": "query",
    "description": "Filter assets belonging to a specific album",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "assetType",
    "required": false,
    "in": "query",
    "description": "Filter assets by media type",
    "schema": {
      "$ref": "#/components/schemas/AssetTypeEnum"
    }
  },
  {
    "name": "bbox",
    "required": false,
    "in": "query",
    "description": "Bounding box coordinates as west,south,east,north (WGS84)",
    "schema": {
      "example": "11.075683,49.416711,11.117589,49.454875",
      "type": "string"
    }
  },
  {
    "name": "dateType",
    "required": false,
    "in": "query",
    "description": "Date source for timeline bucket grouping. Defaults to taken date.",
    "schema": {
      "$ref": "#/components/schemas/TimeBucketDateType"
    }
  },
  {
    "name": "isFavorite",
    "required": false,
    "in": "query",
    "description": "Filter by favorite status (true for favorites only, false for non-favorites only)",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "isTrashed",
    "required": false,
    "in": "query",
    "description": "Filter by trash status (true for trashed assets only, false for non-trashed only)",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "key",
    "required": false,
    "in": "query",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "lockReason",
    "required": false,
    "in": "query",
    "description": "With visibility LOCKED only: return only assets locked for this reason. Requires an elevated session.",
    "schema": {
      "$ref": "#/components/schemas/AssetLockReason"
    }
  },
  {
    "name": "order",
    "required": false,
    "in": "query",
    "description": "Sort order for assets within time buckets (ASC for oldest first, DESC for newest first)",
    "schema": {
      "$ref": "#/components/schemas/AssetOrder"
    }
  },
  {
    "name": "orderBy",
    "required": false,
    "in": "query",
    "description": "Date to group and order assets by (takenAt for date taken, createdAt for date added to Frameleaf)",
    "schema": {
      "$ref": "#/components/schemas/AssetOrderBy"
    }
  },
  {
    "name": "personId",
    "required": false,
    "in": "query",
    "description": "Filter assets containing a specific person (face recognition)",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "petId",
    "required": false,
    "in": "query",
    "description": "Filter assets in which the caller confirmed one of their own pets",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "slug",
    "required": false,
    "in": "query",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "suppressedOnly",
    "required": false,
    "in": "query",
    "description": "Return only suppressed content. Requires an elevated session.",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "tagId",
    "required": false,
    "in": "query",
    "description": "Filter assets with a specific tag",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "timeBucket",
    "required": true,
    "in": "query",
    "description": "Time bucket identifier in YYYY-MM-DDT00:00:00.000Z format",
    "schema": {
      "example": "2024-01-01T00:00:00.000Z",
      "type": "string"
    }
  },
  {
    "name": "userId",
    "required": false,
    "in": "query",
    "description": "Filter assets by specific user ID",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "visibility",
    "required": false,
    "in": "query",
    "description": "Filter by asset visibility status (ARCHIVE, TIMELINE, HIDDEN, LOCKED)",
    "schema": {
      "$ref": "#/components/schemas/AssetVisibility"
    }
  },
  {
    "name": "withCoordinates",
    "required": false,
    "in": "query",
    "description": "Include location data in the response",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "withStacked",
    "required": false,
    "in": "query",
    "description": "Include stacked assets in the response. When true, only primary assets from stacks are returned.",
    "schema": {
      "type": "boolean"
    }
  }
]

Responses

Field definitions: TimeBucketAssetResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/TimeBucketAssetResponseDto"
        }
      }
    },
    "description": ""
  }
}

Get time buckets

GET /api/timeline/buckets

Retrieve a list of all minimal time buckets.

Authentication: API key. Permission: asset.read.

Parameters

NameWhereRequiredDescription
albumIdqueryNoFilter assets belonging to a specific album
assetTypequeryNoFilter assets by media type
bboxqueryNoBounding box coordinates as west,south,east,north (WGS84)
dateTypequeryNoDate source for timeline bucket grouping. Defaults to taken date.
isFavoritequeryNoFilter by favorite status (true for favorites only, false for non-favorites only)
isTrashedqueryNoFilter by trash status (true for trashed assets only, false for non-trashed only)
keyqueryNostring
lockReasonqueryNoWith visibility LOCKED only: return only assets locked for this reason. Requires an elevated session.
orderqueryNoSort order for assets within time buckets (ASC for oldest first, DESC for newest first)
orderByqueryNoDate to group and order assets by (takenAt for date taken, createdAt for date added to Frameleaf)
personIdqueryNoFilter assets containing a specific person (face recognition)
petIdqueryNoFilter assets in which the caller confirmed one of their own pets
slugqueryNostring
suppressedOnlyqueryNoReturn only suppressed content. Requires an elevated session.
tagIdqueryNoFilter assets with a specific tag
userIdqueryNoFilter assets by specific user ID
visibilityqueryNoFilter by asset visibility status (ARCHIVE, TIMELINE, HIDDEN, LOCKED)
withCoordinatesqueryNoInclude location data in the response
withStackedqueryNoInclude stacked assets in the response. When true, only primary assets from stacks are returned.
Parameter types, defaults and constraints

Field definitions: AssetTypeEnum, TimeBucketDateType, AssetLockReason, AssetOrder, AssetOrderBy, AssetVisibility

[
  {
    "name": "albumId",
    "required": false,
    "in": "query",
    "description": "Filter assets belonging to a specific album",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "assetType",
    "required": false,
    "in": "query",
    "description": "Filter assets by media type",
    "schema": {
      "$ref": "#/components/schemas/AssetTypeEnum"
    }
  },
  {
    "name": "bbox",
    "required": false,
    "in": "query",
    "description": "Bounding box coordinates as west,south,east,north (WGS84)",
    "schema": {
      "example": "11.075683,49.416711,11.117589,49.454875",
      "type": "string"
    }
  },
  {
    "name": "dateType",
    "required": false,
    "in": "query",
    "description": "Date source for timeline bucket grouping. Defaults to taken date.",
    "schema": {
      "$ref": "#/components/schemas/TimeBucketDateType"
    }
  },
  {
    "name": "isFavorite",
    "required": false,
    "in": "query",
    "description": "Filter by favorite status (true for favorites only, false for non-favorites only)",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "isTrashed",
    "required": false,
    "in": "query",
    "description": "Filter by trash status (true for trashed assets only, false for non-trashed only)",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "key",
    "required": false,
    "in": "query",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "lockReason",
    "required": false,
    "in": "query",
    "description": "With visibility LOCKED only: return only assets locked for this reason. Requires an elevated session.",
    "schema": {
      "$ref": "#/components/schemas/AssetLockReason"
    }
  },
  {
    "name": "order",
    "required": false,
    "in": "query",
    "description": "Sort order for assets within time buckets (ASC for oldest first, DESC for newest first)",
    "schema": {
      "$ref": "#/components/schemas/AssetOrder"
    }
  },
  {
    "name": "orderBy",
    "required": false,
    "in": "query",
    "description": "Date to group and order assets by (takenAt for date taken, createdAt for date added to Frameleaf)",
    "schema": {
      "$ref": "#/components/schemas/AssetOrderBy"
    }
  },
  {
    "name": "personId",
    "required": false,
    "in": "query",
    "description": "Filter assets containing a specific person (face recognition)",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "petId",
    "required": false,
    "in": "query",
    "description": "Filter assets in which the caller confirmed one of their own pets",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "slug",
    "required": false,
    "in": "query",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "suppressedOnly",
    "required": false,
    "in": "query",
    "description": "Return only suppressed content. Requires an elevated session.",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "tagId",
    "required": false,
    "in": "query",
    "description": "Filter assets with a specific tag",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "userId",
    "required": false,
    "in": "query",
    "description": "Filter assets by specific user ID",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "visibility",
    "required": false,
    "in": "query",
    "description": "Filter by asset visibility status (ARCHIVE, TIMELINE, HIDDEN, LOCKED)",
    "schema": {
      "$ref": "#/components/schemas/AssetVisibility"
    }
  },
  {
    "name": "withCoordinates",
    "required": false,
    "in": "query",
    "description": "Include location data in the response",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "withStacked",
    "required": false,
    "in": "query",
    "description": "Include stacked assets in the response. When true, only primary assets from stacks are returned.",
    "schema": {
      "type": "boolean"
    }
  }
]

Responses

Field definitions: TimeBucketsResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "items": {
            "$ref": "#/components/schemas/TimeBucketsResponseDto"
          },
          "type": "array"
        }
      }
    },
    "description": ""
  }
}

Get timeline highlights

GET /api/timeline/highlights

Curated Years and Months cards for the same filters as the time buckets: per year or month the count, a key photo (highest Best Photos score, then rating, then most recent), highlights for months and the top three places.

Authentication: API key. Permission: asset.read.

Parameters

NameWhereRequiredDescription
albumIdqueryNoFilter assets belonging to a specific album
assetTypequeryNoFilter assets by media type
bboxqueryNoBounding box coordinates as west,south,east,north (WGS84)
dateTypequeryNoDate source for timeline bucket grouping. Defaults to taken date.
groupingqueryNo
highlightCountqueryNoHighlights besides the key photo for each month card (default 4). Year cards carry none
isFavoritequeryNoFilter by favorite status (true for favorites only, false for non-favorites only)
isTrashedqueryNoFilter by trash status (true for trashed assets only, false for non-trashed only)
keyqueryNostring
lockReasonqueryNoWith visibility LOCKED only: return only assets locked for this reason. Requires an elevated session.
orderqueryNoSort order for assets within time buckets (ASC for oldest first, DESC for newest first)
orderByqueryNoDate to group and order assets by (takenAt for date taken, createdAt for date added to Frameleaf)
personIdqueryNoFilter assets containing a specific person (face recognition)
petIdqueryNoFilter assets in which the caller confirmed one of their own pets
slugqueryNostring
suppressedOnlyqueryNoReturn only suppressed content. Requires an elevated session.
tagIdqueryNoFilter assets with a specific tag
userIdqueryNoFilter assets by specific user ID
visibilityqueryNoFilter by asset visibility status (ARCHIVE, TIMELINE, HIDDEN, LOCKED)
withCoordinatesqueryNoInclude location data in the response
withStackedqueryNoInclude stacked assets in the response. When true, only primary assets from stacks are returned.
Parameter types, defaults and constraints

Field definitions: AssetTypeEnum, TimeBucketDateType, TimelineHighlightGrouping, AssetLockReason, AssetOrder, AssetOrderBy, AssetVisibility

[
  {
    "name": "albumId",
    "required": false,
    "in": "query",
    "description": "Filter assets belonging to a specific album",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "assetType",
    "required": false,
    "in": "query",
    "description": "Filter assets by media type",
    "schema": {
      "$ref": "#/components/schemas/AssetTypeEnum"
    }
  },
  {
    "name": "bbox",
    "required": false,
    "in": "query",
    "description": "Bounding box coordinates as west,south,east,north (WGS84)",
    "schema": {
      "example": "11.075683,49.416711,11.117589,49.454875",
      "type": "string"
    }
  },
  {
    "name": "dateType",
    "required": false,
    "in": "query",
    "description": "Date source for timeline bucket grouping. Defaults to taken date.",
    "schema": {
      "$ref": "#/components/schemas/TimeBucketDateType"
    }
  },
  {
    "name": "grouping",
    "required": false,
    "in": "query",
    "schema": {
      "$ref": "#/components/schemas/TimelineHighlightGrouping"
    }
  },
  {
    "name": "highlightCount",
    "required": false,
    "in": "query",
    "description": "Highlights besides the key photo for each month card (default 4). Year cards carry none",
    "schema": {
      "minimum": 0,
      "maximum": 12,
      "type": "integer"
    }
  },
  {
    "name": "isFavorite",
    "required": false,
    "in": "query",
    "description": "Filter by favorite status (true for favorites only, false for non-favorites only)",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "isTrashed",
    "required": false,
    "in": "query",
    "description": "Filter by trash status (true for trashed assets only, false for non-trashed only)",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "key",
    "required": false,
    "in": "query",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "lockReason",
    "required": false,
    "in": "query",
    "description": "With visibility LOCKED only: return only assets locked for this reason. Requires an elevated session.",
    "schema": {
      "$ref": "#/components/schemas/AssetLockReason"
    }
  },
  {
    "name": "order",
    "required": false,
    "in": "query",
    "description": "Sort order for assets within time buckets (ASC for oldest first, DESC for newest first)",
    "schema": {
      "$ref": "#/components/schemas/AssetOrder"
    }
  },
  {
    "name": "orderBy",
    "required": false,
    "in": "query",
    "description": "Date to group and order assets by (takenAt for date taken, createdAt for date added to Frameleaf)",
    "schema": {
      "$ref": "#/components/schemas/AssetOrderBy"
    }
  },
  {
    "name": "personId",
    "required": false,
    "in": "query",
    "description": "Filter assets containing a specific person (face recognition)",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "petId",
    "required": false,
    "in": "query",
    "description": "Filter assets in which the caller confirmed one of their own pets",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "slug",
    "required": false,
    "in": "query",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "suppressedOnly",
    "required": false,
    "in": "query",
    "description": "Return only suppressed content. Requires an elevated session.",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "tagId",
    "required": false,
    "in": "query",
    "description": "Filter assets with a specific tag",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "userId",
    "required": false,
    "in": "query",
    "description": "Filter assets by specific user ID",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "visibility",
    "required": false,
    "in": "query",
    "description": "Filter by asset visibility status (ARCHIVE, TIMELINE, HIDDEN, LOCKED)",
    "schema": {
      "$ref": "#/components/schemas/AssetVisibility"
    }
  },
  {
    "name": "withCoordinates",
    "required": false,
    "in": "query",
    "description": "Include location data in the response",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "withStacked",
    "required": false,
    "in": "query",
    "description": "Include stacked assets in the response. When true, only primary assets from stacks are returned.",
    "schema": {
      "type": "boolean"
    }
  }
]

Responses

Field definitions: TimelineHighlightResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "items": {
            "$ref": "#/components/schemas/TimelineHighlightResponseDto"
          },
          "type": "array"
        }
      }
    },
    "description": ""
  }
}

Get the timeline in a flat order

GET /api/timeline/ordered

One page of the assets the time buckets would show for the same filters, ordered by file name or by rating instead of by date, in the time bucket response shape.

Authentication: API key. Permission: asset.read.

Parameters

NameWhereRequiredDescription
albumIdqueryNoFilter assets belonging to a specific album
assetTypequeryNoFilter assets by media type
bboxqueryNoBounding box coordinates as west,south,east,north (WGS84)
dateTypequeryNoDate source for timeline bucket grouping. Defaults to taken date.
isFavoritequeryNoFilter by favorite status (true for favorites only, false for non-favorites only)
isTrashedqueryNoFilter by trash status (true for trashed assets only, false for non-trashed only)
keyqueryNostring
lockReasonqueryNoWith visibility LOCKED only: return only assets locked for this reason. Requires an elevated session.
orderqueryNoSort order for assets within time buckets (ASC for oldest first, DESC for newest first)
orderByqueryNoDate to group and order assets by (takenAt for date taken, createdAt for date added to Frameleaf)
personIdqueryNoFilter assets containing a specific person (face recognition)
petIdqueryNoFilter assets in which the caller confirmed one of their own pets
skipqueryNoItems to skip
slugqueryNostring
sortqueryYes
suppressedOnlyqueryNoReturn only suppressed content. Requires an elevated session.
tagIdqueryNoFilter assets with a specific tag
takequeryNoItems to return (at most 1000)
userIdqueryNoFilter assets by specific user ID
visibilityqueryNoFilter by asset visibility status (ARCHIVE, TIMELINE, HIDDEN, LOCKED)
withCoordinatesqueryNoInclude location data in the response
withStackedqueryNoInclude stacked assets in the response. When true, only primary assets from stacks are returned.
Parameter types, defaults and constraints

Field definitions: AssetTypeEnum, TimeBucketDateType, AssetLockReason, AssetOrder, AssetOrderBy, TimelineOrderedSort, AssetVisibility

[
  {
    "name": "albumId",
    "required": false,
    "in": "query",
    "description": "Filter assets belonging to a specific album",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "assetType",
    "required": false,
    "in": "query",
    "description": "Filter assets by media type",
    "schema": {
      "$ref": "#/components/schemas/AssetTypeEnum"
    }
  },
  {
    "name": "bbox",
    "required": false,
    "in": "query",
    "description": "Bounding box coordinates as west,south,east,north (WGS84)",
    "schema": {
      "example": "11.075683,49.416711,11.117589,49.454875",
      "type": "string"
    }
  },
  {
    "name": "dateType",
    "required": false,
    "in": "query",
    "description": "Date source for timeline bucket grouping. Defaults to taken date.",
    "schema": {
      "$ref": "#/components/schemas/TimeBucketDateType"
    }
  },
  {
    "name": "isFavorite",
    "required": false,
    "in": "query",
    "description": "Filter by favorite status (true for favorites only, false for non-favorites only)",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "isTrashed",
    "required": false,
    "in": "query",
    "description": "Filter by trash status (true for trashed assets only, false for non-trashed only)",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "key",
    "required": false,
    "in": "query",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "lockReason",
    "required": false,
    "in": "query",
    "description": "With visibility LOCKED only: return only assets locked for this reason. Requires an elevated session.",
    "schema": {
      "$ref": "#/components/schemas/AssetLockReason"
    }
  },
  {
    "name": "order",
    "required": false,
    "in": "query",
    "description": "Sort order for assets within time buckets (ASC for oldest first, DESC for newest first)",
    "schema": {
      "$ref": "#/components/schemas/AssetOrder"
    }
  },
  {
    "name": "orderBy",
    "required": false,
    "in": "query",
    "description": "Date to group and order assets by (takenAt for date taken, createdAt for date added to Frameleaf)",
    "schema": {
      "$ref": "#/components/schemas/AssetOrderBy"
    }
  },
  {
    "name": "personId",
    "required": false,
    "in": "query",
    "description": "Filter assets containing a specific person (face recognition)",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "petId",
    "required": false,
    "in": "query",
    "description": "Filter assets in which the caller confirmed one of their own pets",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "skip",
    "required": false,
    "in": "query",
    "description": "Items to skip",
    "schema": {
      "minimum": 0,
      "maximum": 9007199254740991,
      "default": 0,
      "type": "integer"
    }
  },
  {
    "name": "slug",
    "required": false,
    "in": "query",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "sort",
    "required": true,
    "in": "query",
    "schema": {
      "$ref": "#/components/schemas/TimelineOrderedSort"
    }
  },
  {
    "name": "suppressedOnly",
    "required": false,
    "in": "query",
    "description": "Return only suppressed content. Requires an elevated session.",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "tagId",
    "required": false,
    "in": "query",
    "description": "Filter assets with a specific tag",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "take",
    "required": false,
    "in": "query",
    "description": "Items to return (at most 1000)",
    "schema": {
      "minimum": 1,
      "maximum": 1000,
      "default": 500,
      "type": "integer"
    }
  },
  {
    "name": "userId",
    "required": false,
    "in": "query",
    "description": "Filter assets by specific user ID",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "visibility",
    "required": false,
    "in": "query",
    "description": "Filter by asset visibility status (ARCHIVE, TIMELINE, HIDDEN, LOCKED)",
    "schema": {
      "$ref": "#/components/schemas/AssetVisibility"
    }
  },
  {
    "name": "withCoordinates",
    "required": false,
    "in": "query",
    "description": "Include location data in the response",
    "schema": {
      "type": "boolean"
    }
  },
  {
    "name": "withStacked",
    "required": false,
    "in": "query",
    "description": "Include stacked assets in the response. When true, only primary assets from stacks are returned.",
    "schema": {
      "type": "boolean"
    }
  }
]

Responses

Field definitions: TimeBucketAssetResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/TimeBucketAssetResponseDto"
        }
      }
    },
    "description": ""
  }
}