Skip to main content

Topic Catalogue

All topics use JSON message payloads unless specified otherwise. All messages carry a minimum envelope of { "event_id": "<uuid>", "timestamp": "<iso8601>", "source_service": "<service>", "payload": { ... } }. Topics prefixed internal. are consumed only within the same service and are not part of the inter-service contract.

media.upload.initiated

PropertyValue
ProducerUpload Service
ConsumersTranscoding Worker
Partitions12 (keyed on upload_session_id)
Retention7 days
TriggerFinal segment of a multipart upload confirmed
Payload fields:
  • upload_session_id (string) — Unique upload session identifier
  • content_id (string) — Pre-assigned content record ID
  • creator_id (string)
  • s3_raw_key (string) — S3 key of the raw uploaded file
  • residency (string) — GLOBAL or NG
  • content_type (string) — VIDEO or AUDIO

media.transcoded

PropertyValue
ProducerTranscoding Worker
ConsumersDRM Packaging Worker, Moderation Worker
Partitions24 (keyed on content_id)
Retention7 days
TriggerAll transcoding renditions completed successfully
Payload fields:
  • content_id (string)
  • renditions (array) — List of { resolution, bitrate, s3_key } for each output
  • audio_tracks (array) — List of { bitrate, lang, s3_key }
  • duration_seconds (integer)

media.drm.packaged

PropertyValue
ProducerDRM Packaging Worker
ConsumersContent Service
Partitions12 (keyed on content_id)
Retention7 days
TriggerCMAF dual-encryption packaging complete and manifests written to S3
Payload fields:
  • content_id (string)
  • hls_manifest_url (string) — CDN-relative path to .m3u8
  • dash_manifest_url (string) — CDN-relative path to .mpd
  • cek_id (string) — Key store reference for the CEK

media.published

PropertyValue
ProducerContent Service
ConsumersNotification Service, ML Event Collector (for ANN index update), Creator Dashboard
Partitions12 (keyed on content_id)
Retention30 days
TriggerContent record set to PUBLISHED visibility state
Payload fields:
  • content_id (string)
  • creator_id (string)
  • title (string)
  • content_type (string)
  • categories (array of strings)
  • residency (string)

moderation.flagged

PropertyValue
ProducerModeration Worker
ConsumersContent Service (hold publication), Admin Control Plane (queue review item)
Partitions6 (keyed on content_id)
Retention30 days
TriggerAny automated AI moderation check returns a flag above threshold
Payload fields:
  • content_id (string)
  • creator_id (string)
  • flags (array) — List of { check_type, confidence_score, flagged_timestamp_start, flagged_timestamp_end }
  • queue_priority (string) — STANDARD or ESCALATED

moderation.approved

PropertyValue
ProducerAdmin Control Plane (on human reviewer approval)
ConsumersContent Service
Partitions6 (keyed on content_id)
Retention30 days
TriggerHuman reviewer approves a flagged content item
Payload fields:
  • content_id (string)
  • reviewer_id (string)
  • decision (string) — APPROVED, AGE_GATED, or EDIT_REQUESTED

user.engagement.events

PropertyValue
ProducerEngagement Service
ConsumersML Event Collector (feature store), Creator Dashboard (analytics aggregation)
Partitions48 (keyed on user_id for ordering of per-user event stream)
Retention90 days
TriggerAny trackable user action on content
Payload fields:
  • user_id (string)
  • content_id (string)
  • creator_id (string)
  • event_type (string) — media_started, media_completed, media_liked, media_shared, media_disliked, media_skipped, media_replay, media_added_to_playlist
  • watch_duration_seconds (integer, nullable) — populated for play events
  • content_type (string) — VIDEO or AUDIO
  • session_id (string)

engagement.subscription.changed

PropertyValue
ProducerEngagement Service
ConsumersNotification Service, Creator Dashboard
Partitions12 (keyed on creator_id)
Retention30 days
TriggerUser subscribes to or unsubscribes from a creator channel
Payload fields:
  • user_id (string)
  • creator_id (string)
  • action (string) — SUBSCRIBED or UNSUBSCRIBED

payment.events

PropertyValue
ProducerBilling Service
ConsumersSubscription Service, Notification Service
Partitions12 (keyed on subscriber_id)
Retention365 days (regulatory)
TriggerAny completed or failed payment attempt
Payload fields:
  • subscriber_id (string)
  • subscription_id (string)
  • event_type (string) — payment.processed or payment.failed
  • amount (integer) — in lowest denomination (kobo for NGN, cents for USD)
  • currency (string) — NGN or USD
  • processor (string) — PAYSTACK or STRIPE
  • processor_ref (string) — Provider’s transaction reference

notification.dispatch.requested

PropertyValue
ProducerContent Service, Subscription Service, Billing Service — all via Notification Service API (not directly)
ConsumerNotification Service channels (push, email, in-app workers)
Partitions12 (keyed on user_id)
Retention3 days
TriggerNotification Service receives a dispatch request from any upstream service
Payload fields:
  • user_id (string)
  • notification_type (string) — NEW_CONTENT, PAYMENT_FAILED, SUBSCRIPTION_EXPIRING, MODERATION_DECISION, CREATOR_MILESTONE
  • channels (array) — PUSH, EMAIL, IN_APP
  • template_id (string)
  • template_vars (object)

Build docs developers (and LLMs) love