TimeBucketAssetResponseDto
| Field | Required | Description |
|---|---|---|
city | No | Array of city names extracted from EXIF GPS data |
country | No | Array of country names extracted from EXIF GPS data |
createdAt | Yes | Array of UTC timestamps when each asset was originally uploaded to Frameleaf |
duration | Yes | Array of video/gif durations in milliseconds (null for static images) |
fileCreatedAt | Yes | Array of file creation timestamps in UTC |
fileSizeInByte | No | Array of file sizes in bytes (null when unknown). Omitted for shared links that hide EXIF |
height | No | Array of heights in pixels (null when unknown). Omitted for shared links that hide EXIF |
id | Yes | Array of asset IDs in the time bucket |
isFavorite | Yes | Array indicating whether each asset is favorited |
isImage | Yes | Array indicating whether each asset is an image (false for videos) |
isOffline | No | Array indicating whether each asset is offline (its file is missing from an external library) |
isTrashed | Yes | Array indicating whether each asset is in the trash |
latitude | No | Array of latitude coordinates extracted from EXIF GPS data |
livePhotoVideoId | Yes | Array of live photo video asset IDs (null for non-live photos) |
localOffsetHours | Yes | Array of UTC offset hours at the time each photo was taken. Positive values are east of UTC, negative values are west of UTC. Values may be fractional (e.g., 5.5 for +05:30, -9.75 for -09:45). Applying this offset to 'fileCreatedAt' will give you the time the photo was taken from the photographer's perspective. |
lockReason | No | Why each asset is locked, or null when it is not. Returned with visibility LOCKED and for the timeline of an elevated owner, which reveals their marked and detected items |
longitude | No | Array of longitude coordinates extracted from EXIF GPS data |
originalFileName | No | Array of original file names. Omitted for shared links that hide EXIF |
ownerId | Yes | Array of owner IDs for each asset |
projectionType | Yes | Array of projection types for 360° content (e.g., "EQUIRECTANGULAR", "CUBEFACE", "CYLINDRICAL") |
rating | No | Array of star ratings from EXIF (-1 rejected, 0 unrated, 1-5 stars; null when unknown). Omitted for shared links that hide EXIF |
ratio | Yes | Array of aspect ratios (width/height) for each asset |
stack | No | Array of stack information as [stackId, assetCount] tuples (null for non-stacked assets) |
thumbhash | Yes | Array of BlurHash strings for generating asset previews (base64 encoded) |
visibility | Yes | Array of visibility statuses for each asset (e.g., ARCHIVE, TIMELINE, HIDDEN, LOCKED) |
width | No | Array of widths in pixels (null when unknown). Omitted for shared links that hide EXIF |
Complete definition
required lists fields that must be present. nullable allows a null value; it does not make the field optional. Response enums retain exact wire values for compatibility.
Field definitions: AssetLockReason, AssetVisibility
{
"properties": {
"city": {
"description": "Array of city names extracted from EXIF GPS data",
"items": {
"nullable": true,
"type": "string"
},
"type": "array"
},
"country": {
"description": "Array of country names extracted from EXIF GPS data",
"items": {
"nullable": true,
"type": "string"
},
"type": "array"
},
"createdAt": {
"description": "Array of UTC timestamps when each asset was originally uploaded to Frameleaf",
"items": {
"type": "string"
},
"type": "array"
},
"duration": {
"description": "Array of video/gif durations in milliseconds (null for static images)",
"items": {
"maximum": 2147483647,
"minimum": 0,
"nullable": true,
"type": "integer"
},
"type": "array"
},
"fileCreatedAt": {
"description": "Array of file creation timestamps in UTC",
"items": {
"type": "string"
},
"type": "array"
},
"fileSizeInByte": {
"description": "Array of file sizes in bytes (null when unknown). Omitted for shared links that hide EXIF",
"items": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"nullable": true,
"type": "integer"
},
"type": "array"
},
"height": {
"description": "Array of heights in pixels (null when unknown). Omitted for shared links that hide EXIF",
"items": {
"maximum": 2147483647,
"minimum": -2147483648,
"nullable": true,
"type": "integer"
},
"type": "array"
},
"id": {
"description": "Array of asset IDs in the time bucket",
"items": {
"type": "string"
},
"type": "array"
},
"isFavorite": {
"description": "Array indicating whether each asset is favorited",
"items": {
"type": "boolean"
},
"type": "array"
},
"isImage": {
"description": "Array indicating whether each asset is an image (false for videos)",
"items": {
"type": "boolean"
},
"type": "array"
},
"isOffline": {
"description": "Array indicating whether each asset is offline (its file is missing from an external library)",
"items": {
"type": "boolean"
},
"type": "array"
},
"isTrashed": {
"description": "Array indicating whether each asset is in the trash",
"items": {
"type": "boolean"
},
"type": "array"
},
"latitude": {
"description": "Array of latitude coordinates extracted from EXIF GPS data",
"items": {
"format": "double",
"nullable": true,
"type": "number"
},
"type": "array"
},
"livePhotoVideoId": {
"description": "Array of live photo video asset IDs (null for non-live photos)",
"items": {
"nullable": true,
"type": "string"
},
"type": "array"
},
"localOffsetHours": {
"description": "Array of UTC offset hours at the time each photo was taken. Positive values are east of UTC, negative values are west of UTC. Values may be fractional (e.g., 5.5 for +05:30, -9.75 for -09:45). Applying this offset to 'fileCreatedAt' will give you the time the photo was taken from the photographer's perspective.",
"items": {
"format": "double",
"type": "number"
},
"type": "array"
},
"lockReason": {
"description": "Why each asset is locked, or null when it is not. Returned with visibility LOCKED and for the timeline of an elevated owner, which reveals their marked and detected items",
"items": {
"allOf": [
{
"$ref": "#/components/schemas/AssetLockReason"
}
],
"nullable": true
},
"type": "array"
},
"longitude": {
"description": "Array of longitude coordinates extracted from EXIF GPS data",
"items": {
"format": "double",
"nullable": true,
"type": "number"
},
"type": "array"
},
"originalFileName": {
"description": "Array of original file names. Omitted for shared links that hide EXIF",
"items": {
"type": "string"
},
"type": "array"
},
"ownerId": {
"description": "Array of owner IDs for each asset",
"items": {
"type": "string"
},
"type": "array"
},
"projectionType": {
"description": "Array of projection types for 360° content (e.g., \"EQUIRECTANGULAR\", \"CUBEFACE\", \"CYLINDRICAL\")",
"items": {
"nullable": true,
"type": "string"
},
"type": "array"
},
"rating": {
"description": "Array of star ratings from EXIF (-1 rejected, 0 unrated, 1-5 stars; null when unknown). Omitted for shared links that hide EXIF",
"items": {
"maximum": 5,
"minimum": -1,
"nullable": true,
"type": "integer"
},
"type": "array"
},
"ratio": {
"description": "Array of aspect ratios (width/height) for each asset",
"items": {
"format": "double",
"type": "number"
},
"type": "array"
},
"stack": {
"description": "Array of stack information as [stackId, assetCount] tuples (null for non-stacked assets)",
"items": {
"items": {
"type": "string"
},
"maxItems": 2,
"minItems": 2,
"nullable": true,
"type": "array"
},
"type": "array"
},
"thumbhash": {
"description": "Array of BlurHash strings for generating asset previews (base64 encoded)",
"items": {
"nullable": true,
"type": "string"
},
"type": "array"
},
"visibility": {
"description": "Array of visibility statuses for each asset (e.g., ARCHIVE, TIMELINE, HIDDEN, LOCKED)",
"items": {
"$ref": "#/components/schemas/AssetVisibility"
},
"type": "array"
},
"width": {
"description": "Array of widths in pixels (null when unknown). Omitted for shared links that hide EXIF",
"items": {
"maximum": 2147483647,
"minimum": -2147483648,
"nullable": true,
"type": "integer"
},
"type": "array"
}
},
"required": [
"createdAt",
"duration",
"fileCreatedAt",
"id",
"isFavorite",
"isImage",
"isTrashed",
"livePhotoVideoId",
"localOffsetHours",
"ownerId",
"projectionType",
"ratio",
"thumbhash",
"visibility"
],
"type": "object"
}© 2026 Frameleaf Inc. All rights reserved.
Frameleaf and the Frameleaf logo are Trademarks of Frameleaf Inc.