PetObservationResponseDto
| Field | Required | Description |
|---|---|---|
assetId | Yes | Asset ID |
boundingBoxX1 | Yes | Region X1, in source pixels |
boundingBoxX2 | Yes | Region X2, in source pixels |
boundingBoxY1 | Yes | Region Y1, in source pixels |
boundingBoxY2 | Yes | Region Y2, in source pixels |
createdAt | Yes | Creation date |
id | Yes | Observation ID |
imageHeight | Yes | Height of the image the region was drawn on |
imageWidth | Yes | Width of the image the region was drawn on |
petId | Yes | Pet ID |
source | Yes | See definition below |
sourceChecksum | Yes | Checksum (base64) of the original when the decision was made; null for older decisions |
staleAt | Yes | When the original was replaced under a drawn region, which then needs review; null when current |
state | Yes | See definition below |
updatedAt | Yes | Last update date |
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: PetObservationSource, PetObservationState
{
"properties": {
"assetId": {
"description": "Asset 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"
},
"boundingBoxX1": {
"description": "Region X1, in source pixels",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"nullable": true,
"type": "integer"
},
"boundingBoxX2": {
"description": "Region X2, in source pixels",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"nullable": true,
"type": "integer"
},
"boundingBoxY1": {
"description": "Region Y1, in source pixels",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"nullable": true,
"type": "integer"
},
"boundingBoxY2": {
"description": "Region Y2, in source pixels",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"nullable": true,
"type": "integer"
},
"createdAt": {
"description": "Creation date",
"format": "date-time",
"type": "string"
},
"id": {
"description": "Observation 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"
},
"imageHeight": {
"description": "Height of the image the region was drawn on",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"nullable": true,
"type": "integer"
},
"imageWidth": {
"description": "Width of the image the region was drawn on",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"nullable": true,
"type": "integer"
},
"petId": {
"description": "Pet 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"
},
"source": {
"$ref": "#/components/schemas/PetObservationSource"
},
"sourceChecksum": {
"description": "Checksum (base64) of the original when the decision was made; null for older decisions",
"nullable": true,
"type": "string"
},
"staleAt": {
"description": "When the original was replaced under a drawn region, which then needs review; null when current",
"format": "date-time",
"nullable": true,
"type": "string"
},
"state": {
"$ref": "#/components/schemas/PetObservationState"
},
"updatedAt": {
"description": "Last update date",
"format": "date-time",
"type": "string"
}
},
"required": [
"assetId",
"boundingBoxX1",
"boundingBoxX2",
"boundingBoxY1",
"boundingBoxY2",
"createdAt",
"id",
"imageHeight",
"imageWidth",
"petId",
"source",
"sourceChecksum",
"staleAt",
"state",
"updatedAt"
],
"type": "object"
}© 2026 Frameleaf Inc. All rights reserved.
Frameleaf and the Frameleaf logo are Trademarks of Frameleaf Inc.