ClassificationRuleCreateDto
| Field | Required | Description |
|---|---|---|
action | No | Defaults to the server default rule action |
albumName | Yes | Name of the smart album |
archive | No | Archive matches; requires archiveConsent |
archiveConsent | No | The owner explicitly agrees that matches are archived |
description | No | Description of the smart album |
enabled | No | boolean |
icon | No | Icon of the smart album |
mediaType | No | See definition below |
parentId | No | Collection to create the smart album inside |
personIds | No | Match any of these people |
tagIds | No | Match any of these tags, or a tag beneath one of them |
tagName | No | The rule-owned tag a match receives; null tags nothing |
takenAfter | No | Taken on or after this day (YYYY-MM-DD) |
takenBefore | No | Taken on or before this day (YYYY-MM-DD) |
threshold | No | The confidence a visual phrase has to reach |
visualQueries | No | Visual category phrases compared with each item |
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: ClassificationRuleAction, ClassificationMediaType
{
"properties": {
"action": {
"$ref": "#/components/schemas/ClassificationRuleAction",
"description": "Defaults to the server default rule action"
},
"albumName": {
"description": "Name of the smart album",
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"archive": {
"default": false,
"description": "Archive matches; requires archiveConsent",
"type": "boolean"
},
"archiveConsent": {
"description": "The owner explicitly agrees that matches are archived",
"type": "boolean"
},
"description": {
"description": "Description of the smart album",
"maxLength": 2000,
"nullable": true,
"type": "string"
},
"enabled": {
"default": true,
"type": "boolean"
},
"icon": {
"description": "Icon of the smart album",
"maxLength": 80,
"type": "string"
},
"mediaType": {
"$ref": "#/components/schemas/ClassificationMediaType",
"default": "any"
},
"parentId": {
"description": "Collection to create the smart album inside",
"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"
},
"personIds": {
"default": [],
"description": "Match any of these people",
"items": {
"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"
},
"maxItems": 50,
"type": "array"
},
"tagIds": {
"default": [],
"description": "Match any of these tags, or a tag beneath one of them",
"items": {
"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"
},
"maxItems": 50,
"type": "array"
},
"tagName": {
"description": "The rule-owned tag a match receives; null tags nothing",
"maxLength": 120,
"minLength": 1,
"nullable": true,
"type": "string"
},
"takenAfter": {
"default": null,
"description": "Taken on or after this day (YYYY-MM-DD)",
"nullable": true,
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"takenBefore": {
"default": null,
"description": "Taken on or before this day (YYYY-MM-DD)",
"nullable": true,
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"threshold": {
"default": 0.25,
"description": "The confidence a visual phrase has to reach",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
},
"visualQueries": {
"default": [],
"description": "Visual category phrases compared with each item",
"items": {
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"maxItems": 10,
"type": "array"
}
},
"required": [
"albumName"
],
"type": "object"
}© 2026 Frameleaf Inc. All rights reserved.
Frameleaf and the Frameleaf logo are Trademarks of Frameleaf Inc.