ImageDescriptionEnrichmentResponseDto
| Field | Required | Description |
|---|---|---|
appliedDescription | Yes | boolean |
appliedTags | Yes | boolean |
confidence | No | The model's confidence in the description, 0 to 1, when the processing destination reported one; null otherwise |
context | No | string |
description | No | string |
destinationId | No | The processing destination that generated the description |
environment | No | string |
error | No | string |
modelName | No | string |
objects | No | array |
people | No | array |
skipReason | No | Machine-readable reason when status === "skipped" |
staleReason | No | Set when the generated description is out of date: the original was replaced, confirmed names changed, or the saved prompt changed |
status | Yes | string |
tags | No | array |
updatedAt | No | string |
visibleText | No | array |
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: EnrichmentStaleReason
{
"properties": {
"appliedDescription": {
"type": "boolean"
},
"appliedTags": {
"type": "boolean"
},
"confidence": {
"description": "The model's confidence in the description, 0 to 1, when the processing destination reported one; null otherwise",
"format": "double",
"maximum": 1,
"minimum": 0,
"nullable": true,
"type": "number"
},
"context": {
"type": "string"
},
"description": {
"type": "string"
},
"destinationId": {
"description": "The processing destination that generated the description",
"type": "string"
},
"environment": {
"type": "string"
},
"error": {
"type": "string"
},
"modelName": {
"type": "string"
},
"objects": {
"items": {
"type": "string"
},
"type": "array"
},
"people": {
"items": {
"properties": {
"activity": {
"type": "string"
},
"apparent_age_group": {
"type": "string"
},
"confidence": {
"type": "string"
},
"count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"count",
"apparent_age_group",
"activity",
"confidence"
],
"type": "object"
},
"type": "array"
},
"skipReason": {
"description": "Machine-readable reason when status === \"skipped\"",
"type": "string"
},
"staleReason": {
"$ref": "#/components/schemas/EnrichmentStaleReason",
"description": "Set when the generated description is out of date: the original was replaced, confirmed names changed, or the saved prompt changed"
},
"status": {
"enum": [
"missing",
"success",
"failed",
"skipped"
],
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"updatedAt": {
"type": "string"
},
"visibleText": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"appliedDescription",
"appliedTags",
"status"
],
"type": "object"
}© 2026 Frameleaf Inc. All rights reserved.
Frameleaf and the Frameleaf logo are Trademarks of Frameleaf Inc.