ObjectStackObjectStack

Events schema — API Protocol reference

Events schemas of the ObjectStack API Protocol: BulkDataEvent, BulkDataEventType and 4 more — each property with its type, default and a TypeScript example.

Source: packages/spec/src/api/events.zod.ts

TypeScript Usage

import { BulkDataEventSchema, BulkDataEventType, DataEventSchema, DataEventType, MetadataEventSchema, MetadataEventType } from '@objectstack/spec/api';
import type { BulkDataEvent, BulkDataEventType, DataEvent, DataEventType, MetadataEvent, MetadataEventType } from '@objectstack/spec/api';

// Validate data
const result = BulkDataEventSchema.parse(data);

BulkDataEvent

Properties

PropertyTypeRequiredDescription
idstring✅Unique event identifier
typeEnum<'data.records.updated' | 'data.records.deleted'>✅Event type
objectstring✅Object name
organizationIdstringoptionalOrganization every record the predicate write affected belongs to — one organization for the whole batch, never per-row. Present = exactly that organization, asserted by the producer from the composed tenant wall, never fabricated and never the caller's active organization standing in for the rows'; the empty string is refused. Absent = the producer did not assert one organization for the batch (every event on a single-posture deployment; a system, environment-wide or cross-membership predicate write; any write whose affected rows are not known to belong to one organization) — deliberately NOT the DataEvent reading "belongs to no organization". A tenant-scoped consumer must treat an absent key as not attributable to its organization and must not deliver the event inside an organization wall; a deployment-wide consumer may use it.
matchedinteger✅Number of records affected
userIdstringoptionalUser who triggered the event
timestampstring✅Event timestamp

BulkDataEventType

Allowed Values

  • data.records.updated
  • data.records.deleted

DataEvent

Properties

PropertyTypeRequiredDescription
idstring✅Unique event identifier
typeEnum<'data.record.created' | 'data.record.updated' | 'data.record.deleted'>✅Event type
objectstring✅Object name
recordIdstring✅Record ID
organizationIdstringoptionalOrganization the record belongs to (its organization_id), so a tenant-scoped consumer can discriminate the event's tenant without reading the record body. Absent when the record belongs to no organization: every event on a single-posture deployment (no organization wall, nothing stamps the column), and a row that carries no organization under a walled posture (environment-wide, or an object outside the wall) — read absence as "not behind any organization wall", never as "unknown". Present = exactly that organization; never fabricated, and the empty string is refused.
changesRecord<string, any>optionalChanged fields
beforeRecord<string, any>optionalBefore state
afterRecord<string, any>optionalAfter state
userIdstringoptionalUser who triggered the event
timestampstring✅Event timestamp

DataEventType

Allowed Values

  • data.record.created
  • data.record.updated
  • data.record.deleted

MetadataEvent

Properties

PropertyTypeRequiredDescription
idstring✅Unique event identifier
typeEnum<'metadata.object.created' | 'metadata.object.updated' | 'metadata.object.deleted' | 'metadata.field.created' | 'metadata.field.updated' | … +34 more>✅Event type
metadataTypestring✅Metadata type (object, view, agent, etc.)
namestring✅Metadata item name
packageIdstringoptionalPackage ID
definitionanyoptionalFull definition (create/update only)
userIdstringoptionalUser who triggered the event
timestampstring✅Event timestamp

Allowed Values: MetadataEvent.type

  • metadata.object.created
  • metadata.object.updated
  • metadata.object.deleted
  • metadata.field.created
  • metadata.field.updated
  • metadata.field.deleted
  • metadata.view.created
  • metadata.view.updated
  • metadata.view.deleted
  • metadata.app.created
  • metadata.app.updated
  • metadata.app.deleted
  • metadata.agent.created
  • metadata.agent.updated
  • metadata.agent.deleted
  • metadata.tool.created
  • metadata.tool.updated
  • metadata.tool.deleted
  • metadata.flow.created
  • metadata.flow.updated
  • metadata.flow.deleted
  • metadata.action.created
  • metadata.action.updated
  • metadata.action.deleted
  • metadata.workflow.created
  • metadata.workflow.updated
  • metadata.workflow.deleted
  • metadata.dashboard.created
  • metadata.dashboard.updated
  • metadata.dashboard.deleted
  • metadata.report.created
  • metadata.report.updated
  • metadata.report.deleted
  • metadata.role.created
  • metadata.role.updated
  • metadata.role.deleted
  • metadata.permission.created
  • metadata.permission.updated
  • metadata.permission.deleted

MetadataEventType

Allowed Values

  • metadata.object.created
  • metadata.object.updated
  • metadata.object.deleted
  • metadata.field.created
  • metadata.field.updated
  • metadata.field.deleted
  • metadata.view.created
  • metadata.view.updated
  • metadata.view.deleted
  • metadata.app.created
  • metadata.app.updated
  • metadata.app.deleted
  • metadata.agent.created
  • metadata.agent.updated
  • metadata.agent.deleted
  • metadata.tool.created
  • metadata.tool.updated
  • metadata.tool.deleted
  • metadata.flow.created
  • metadata.flow.updated
  • metadata.flow.deleted
  • metadata.action.created
  • metadata.action.updated
  • metadata.action.deleted
  • metadata.workflow.created
  • metadata.workflow.updated
  • metadata.workflow.deleted
  • metadata.dashboard.created
  • metadata.dashboard.updated
  • metadata.dashboard.deleted
  • metadata.report.created
  • metadata.report.updated
  • metadata.report.deleted
  • metadata.role.created
  • metadata.role.updated
  • metadata.role.deleted
  • metadata.permission.created
  • metadata.permission.updated
  • metadata.permission.deleted

On this page