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

FieldTypeRequiredDescriptionConstraints
object_idstringyes
  • pattern ^med_[0-9A-HJKMNP-TV-Z]{26}$
app_idstringyesThe tenant that owns the object: an app (live, tools…) or a developer project's production tenant (prj_…).
  • minLength 1
  • maxLength 200
kindenumyes
  • one of "vod", "clip", "file", "thumbnail", "screenshot", "avatar", "asset"
legacy_refstring | nullyesThe inherited row the object projects (legacy:<app>:<kind>:<id>, a media.media-ref@1 legacy id); null for a native v2 object.
  • maxLength 300
deleted_atstringyesWhen the change committed, ISO 8601 UTC.
  • format date-time

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 }] }