StudioProjectDto
| Field | Required | Description |
|---|---|---|
access | Yes | See definition below |
archivedAt | Yes | When the owner archived it |
createdAt | Yes | string |
deletedAt | Yes | When it was moved to the trash |
duplicatedFromId | Yes | The project this one was duplicated from; null for a reviewer |
id | Yes | Studio project ID |
importedFromBundle | Yes | The project was read in from a portable bundle; always false for a reviewer |
lastOpenedAt | Yes | When an editor last opened it; null for a reviewer |
lease | Yes | See definition below |
name | Yes | string |
ownerId | Yes | The only account that may write |
purgeAfter | Yes | When a trashed project is deleted for good; its library media is never touched |
revision | Yes | Head revision number; 0 until the first save |
shelf | Yes | See definition below |
spaceId | Yes | Shared space whose members may review the project |
thumbnailAssetId | Yes | Library asset the owner chose as the poster; null for a reviewer |
updatedAt | Yes | string |
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: StudioProjectAccess, StudioProjectLeaseDto, StudioProjectShelf
{
"properties": {
"access": {
"$ref": "#/components/schemas/StudioProjectAccess"
},
"archivedAt": {
"description": "When the owner archived it",
"format": "date-time",
"nullable": true,
"type": "string"
},
"createdAt": {
"format": "date-time",
"type": "string"
},
"deletedAt": {
"description": "When it was moved to the trash",
"format": "date-time",
"nullable": true,
"type": "string"
},
"duplicatedFromId": {
"description": "The project this one was duplicated from; null for a reviewer",
"format": "uuid",
"nullable": true,
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
"type": "string"
},
"id": {
"description": "Studio project ID",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
"type": "string"
},
"importedFromBundle": {
"description": "The project was read in from a portable bundle; always false for a reviewer",
"type": "boolean"
},
"lastOpenedAt": {
"description": "When an editor last opened it; null for a reviewer",
"format": "date-time",
"nullable": true,
"type": "string"
},
"lease": {
"$ref": "#/components/schemas/StudioProjectLeaseDto"
},
"name": {
"type": "string"
},
"ownerId": {
"description": "The only account that may write",
"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"
},
"purgeAfter": {
"description": "When a trashed project is deleted for good; its library media is never touched",
"format": "date-time",
"nullable": true,
"type": "string"
},
"revision": {
"description": "Head revision number; 0 until the first save",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"shelf": {
"$ref": "#/components/schemas/StudioProjectShelf"
},
"spaceId": {
"description": "Shared space whose members may review the project",
"format": "uuid",
"nullable": true,
"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"
},
"thumbnailAssetId": {
"description": "Library asset the owner chose as the poster; null for a reviewer",
"format": "uuid",
"nullable": true,
"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"
},
"updatedAt": {
"format": "date-time",
"type": "string"
}
},
"required": [
"access",
"archivedAt",
"createdAt",
"deletedAt",
"duplicatedFromId",
"id",
"importedFromBundle",
"lastOpenedAt",
"lease",
"name",
"ownerId",
"purgeAfter",
"revision",
"shelf",
"spaceId",
"thumbnailAssetId",
"updatedAt"
],
"type": "object"
}© 2026 Frameleaf Inc. All rights reserved.
Frameleaf and the Frameleaf logo are Trademarks of Frameleaf Inc.