SharedLinkResponseDto
Shared link response
| Field | Required | Description |
|---|---|---|
album | No | See definition below |
allowDownload | Yes | Allow downloads |
allowUpload | Yes | Allow uploads |
assets | Yes | array |
createdAt | Yes | Creation date |
description | Yes | Link description |
expiresAt | Yes | Expiration date |
id | Yes | Shared link ID |
key | Yes | Encryption key (base64url) |
owner | No | Display name of the user who created the link, for "Shared by" on the public page |
password | Yes | Has password: a fixed mask when the link has one, never the password itself |
showMetadata | Yes | Show metadata |
slug | Yes | Custom URL slug |
type | Yes | See definition below |
url | Yes | The link's public address: the server's external domain, then /s/<slug> (URL-encoded) or /share/<key>. Null when no external domain is set; a client then puts the same path after the address it uses. |
userId | Yes | Owner user ID |
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: AlbumResponseDto, AssetResponseDto, SharedLinkOwnerResponseDto, SharedLinkType
{
"description": "Shared link response",
"properties": {
"album": {
"$ref": "#/components/schemas/AlbumResponseDto"
},
"allowDownload": {
"description": "Allow downloads",
"type": "boolean"
},
"allowUpload": {
"description": "Allow uploads",
"type": "boolean"
},
"assets": {
"items": {
"$ref": "#/components/schemas/AssetResponseDto"
},
"type": "array"
},
"createdAt": {
"description": "Creation date",
"example": "2024-01-01T00:00:00.000Z",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"type": "string"
},
"description": {
"description": "Link description",
"nullable": true,
"type": "string"
},
"expiresAt": {
"description": "Expiration date",
"example": "2024-01-01T00:00:00.000Z",
"format": "date-time",
"nullable": true,
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"type": "string"
},
"id": {
"description": "Shared link ID",
"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"
},
"key": {
"description": "Encryption key (base64url)",
"type": "string"
},
"owner": {
"$ref": "#/components/schemas/SharedLinkOwnerResponseDto",
"description": "Display name of the user who created the link, for \"Shared by\" on the public page"
},
"password": {
"description": "Has password: a fixed mask when the link has one, never the password itself",
"nullable": true,
"type": "string"
},
"showMetadata": {
"description": "Show metadata",
"type": "boolean"
},
"slug": {
"description": "Custom URL slug",
"nullable": true,
"type": "string"
},
"type": {
"$ref": "#/components/schemas/SharedLinkType"
},
"url": {
"description": "The link's public address: the server's external domain, then /s/<slug> (URL-encoded) or /share/<key>. Null when no external domain is set; a client then puts the same path after the address it uses.",
"nullable": true,
"type": "string"
},
"userId": {
"description": "Owner user ID",
"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"
}
},
"required": [
"allowDownload",
"allowUpload",
"assets",
"createdAt",
"description",
"expiresAt",
"id",
"key",
"password",
"showMetadata",
"slug",
"type",
"url",
"userId"
],
"type": "object"
}© 2026 Frameleaf Inc. All rights reserved.
Frameleaf and the Frameleaf logo are Trademarks of Frameleaf Inc.