ObjectLabel; send a single label as a one-element array. Registration is an upsert: an existing object id gets its label replaced and its timestamps reset.MZVObject.label just before every publish (WebSocket area push and GET /object in MZ mode). It is a display-only derived value: kept in memory, lost on restart, never persisted to DB. Playback frames are not labeled.object_label.stale_sec (default 600s) expires and disappears from GET /object/label. Each successful injection resets the TTL, so a label never expires while its object is being published.ObjectLabels.Validate)object_label.max_entries (default 1000) elements.null elements. objectID is required and must be unique within the batch.label is required, 1-20 characters (runes), no leading/trailing spaces, allowed characters: Korean (syllables and jamo), letters, digits, space, - _ . , ( ) # /. Control characters, emoji and < > are rejected.registeredAt and lastReferencedAt are server-owned; values sent by the client are discarded."; " (e.g. labels[0]: objectID is required; labels[1]: label exceeds 20 characters), so a rejected request can be fixed in one pass.object_label.max_entries; a batch that would exceed it is rejected whole (no partial registration).object_label.enable=false; that flag only stops the injection into published objects.curl --location --globoff '{{dev_mbembo_url}}/api/v1/mbembo/object/label' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '[
{ "objectID": "1-10923", "label": "지게차 A" }
]'{
"trID": "20261006141205331001",
"resultCode": "0200",
"resultMsg": "RegisterObjectLabels OK",
"resultData": [
{
"objectID": "1-10923",
"label": "지게차 A",
"registeredAt": "2026-10-06T14:12:05.331Z",
"lastReferencedAt": "2026-10-06T14:12:05.331Z"
}
]
}