MediaObjectDeletedPayload media.object.deleted@1
Generated at from
openvibe-contracts v0.34.2 and
openvibe-sdk v0.5.0.
- Version
- 1.0.0
- Owner
- media
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/events/payloads/media.object.deleted.v1.json
media.object.deleted v1 (OpenVibe.Media server/events.js objectChangeEvent and recordObjectChanges, commit 039dc48, from the media_object_changes rows that the AFTER UPDATE OF lifecycle_status trigger on media_objects writes). An object's lifecycle_status became deleted: a native object soft-deleted through DELETE /api/v2/:app/objects/:id, or an inherited vods/clips/files/pastes row removed, which marks its object deleted. Every write path counts (operator SQL included), and the event exists if and only if the change committed: the trigger row and the outbox envelope are written in the transaction of the change, or by the relay's drain for a change made outside Media's own transactions. Consumers drop any public copy, index entry or cache they hold for the object (roadmap §29.3). Deliberately minimal, identity and state only: never the title, description or metadata, the owner's ids or subject, storage keys, paths or providers, sizes or hashes. Developer-project sandbox tenants produce none. Envelope: subject { type: object, id: <object_id> }, visibility internal, priority important, actor service:media.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
object_id | string | yes |
| |
app_id | string | yes | The tenant that owns the object: an app (live, tools…) or a developer project's production tenant (prj_…). |
|
kind | enum | yes |
| |
legacy_ref | string | null | yes | The inherited row the object projects (legacy:<app>:<kind>:<id>, a media.media-ref@1 legacy id); null for a native v2 object. |
|
deleted_at | string | yes | When the change committed, ISO 8601 UTC. |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: inherited-vod
{
"object_id": "med_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"app_id": "live",
"kind": "vod",
"legacy_ref": "legacy:live:vod:123",
"deleted_at": "2026-09-24T01:02:03.000Z"
}Valid: native-file
{
"object_id": "med_01JAB2C3D4E5F6G7H8J9K0MNPR",
"app_id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPS",
"kind": "file",
"legacy_ref": null,
"deleted_at": "2026-09-24T01:02:03.000Z"
}Rejected: legacy-object-id
{
"object_id": "legacy:live:vod:123",
"app_id": "live",
"kind": "vod",
"legacy_ref": "legacy:live:vod:123",
"deleted_at": "2026-09-24T01:02:03.000Z"
}Rejected: no-time
{
"object_id": "med_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"app_id": "live",
"kind": "paste",
"legacy_ref": null
}Rejected: storage-key
{
"object_id": "med_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"app_id": "live",
"kind": "vod",
"legacy_ref": null,
"deleted_at": "2026-09-24T01:02:03.000Z",
"storage_key": "vods/live/123.mp4"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('media.object.deleted@1', value); // { valid, errors: [{ path, message }] }