Skip to content

Realtime events

Realtime events are for awareness and refresh triggers, not large data transfer.

Supabase Realtime broadcasts use snake_case payloads derived from frame_events table inserts. Static app fixtures may denormalize the same facts into UI-friendly camelCase fields, but API and database code should follow this shape:

{
"type": "frame.submission.status_changed",
"tenant_id": "uuid",
"submission_id": "uuid",
"agent_id": "uuid",
"channel_id": "uuid",
"status": "needs_review",
"occurred_at": "2026-05-21T10:00:00Z"
}
  • frame.submission.created
  • frame.submission.status_changed
  • frame.media.status_changed
  • frame.approval.changed
  • frame.promoted
  • frame.rejected
  • api_key.used
  • api_key.revoked

The UI fetches the full row after receiving an event.