Aller au contenu principal

Event Types & Automations Catalog

Complete reference of all 55 event types and their automations


Overview

This catalog documents:

  • 81 Generated Events (from 9 database tables × 9 event types each)
    • 27 .requested events (user/AI intent)
    • 27 .approved events (permission validated)
    • 27 .validated events (operation complete)
  • 1 System Event (webhooks)
  • Default worker/automation for each event
  • Data schemas and payloads

Note: Synap uses a 3-phase event pattern for security:

  1. .requested - User or AI expresses intent
  2. .approved - Permission validator authorizes
  3. .validated - Operation completed successfully

How to Read This Catalog

Each event entry shows:

event_type
Trigger: What causes this event
Automation: What happens automatically
Output: What gets created/updated
Schema: Expected data structure

Note: The catalog focuses on WHAT happens, not implementation details about which worker processes each event.


Generated Events

Entities (9 events)

Purpose: Core knowledge graph nodes (notes, tasks, projects)

entities.create.requested

  • Trigger: User or AI creates an entity
  • Automation: Permission Validator Worker
  • Action: Check ownership and permissions
  • Output: entities.create.approved (if authorized) or rejected
  • Schema:
{
type: string, // 'note' | 'task' | 'project'
title?: string,
content?: string,
tags?: string[],
metadata?: Record<string, unknown>
}

entities.create.approved

  • Trigger: After permission validation passes
  • Automation: Entities Worker
  • Action: Validate → upload content to storage → create DB record
  • Output: entities.create.validated + entity in DB + content file
  • Note: 3-phase pattern - Permission check happens BEFORE DB operation

entities.create.validated

  • Trigger: After entity created successfully
  • Automation: AI Analyzer + Embedding Worker
  • Action: Generate embeddings + extract metadata + detect insights
  • Output: Vector in entity_vectors + AI suggestions

entities.update.requested

  • Trigger: User or AI updates entity
  • Automation: Permission Validator Worker
  • Action: Check if user owns entity or has workspace permission
  • Output: entities.update.approved or rejected
  • Schema:
{
entityId: string,
changes?: Record<string, unknown>,
content?: string,
title?: string
}

entities.update.approved

  • Trigger: After permission validation passes
  • Automation: Entities Worker
  • Action: Validate → update DB → upload new content (if changed)
  • Output: entities.update.validated

entities.update.validated

  • Trigger: After entity updated
  • Automation: AI Analyzer (if content changed)
  • Action: Regenerate embeddings
  • Output: Updated vectors

entities.delete.requested

  • Trigger: User deletes entity
  • Automation: Permission Validator Worker
  • Action: Check if user owns entity
  • Output: entities.delete.approved or rejected

entities.delete.approved

  • Trigger: After permission validation passes
  • Automation: Entities Worker
  • Action: Soft delete (set deleted_at)
  • Output: entities.delete.validated

entities.delete.validated

  • Trigger: After entity deleted
  • Automation: None (no post-processing)

Documents (9 events)

Purpose: User-uploaded documents with automatic versioning

documents.create.requested

  • Trigger: User uploads document
  • Automation: Documents Worker
  • Automation: Upload to storage + create DB record + generate preview
  • Output: documents.create.validated + document metadata
  • Schema:
{
title: string,
type: 'text' | 'markdown' | 'code' | 'pdf' | 'docx',
content: Buffer | string,
language?: string, // for code files
projectId?: string
}

documents.create.validated

  • Trigger: After document created
  • Automation: AI Analyzer
  • Automation: Generate embeddings for search
  • Output: Searchable document

documents.update.requested

  • Trigger: User edits document
  • Automation: Documents Worker
  • Automation: Create new version + store delta + update DB
  • Output: documents.update.validated + new documentVersion record
  • Schema:
{
documentId: string,
content: string,
delta?: object, // Operational Transform delta
message?: string // Commit message
}

🎯 Default Automation: Automatic Versioning

  • Every update creates a new version
  • Stores delta (diff) for efficient storage
  • Enables time-travel (view any past version)

documents.update.validated

  • Trigger: After document updated + version created
  • Automation: AI Analyzer
  • Automation: Regenerate embeddings (if content changed)

documents.delete.requested

  • Trigger: User deletes document
  • Automation: Documents Worker
  • Automation: Soft delete + preserve all versions
  • Output: documents.delete.validated

documents.delete.validated

  • Trigger: After document deleted
  • Automation: None

Document Versions (9 events)

Purpose: Document revision history

documentVersions.create.requested

  • Trigger: Automatically when document updated (internal)
  • Automation: Documents Worker
  • Automation: Create version snapshot
  • Output: documentVersions.create.validated

documentVersions.create.validated

  • Trigger: Version created
  • Automation: None (read-only history)

(update/delete not used - versions are immutable)


Chat Threads (9 events)

Purpose: Conversation containers

chatThreads.create.requested

  • Trigger: User starts new conversation
  • Automation: Chat Worker
  • Automation: Create thread + assign first message
  • Output: chatThreads.create.validated
  • Schema:
{
title?: string,
participants?: string[], // user IDs
metadata?: Record<string, unknown>
}

chatThreads.create.validated

  • Trigger: Thread created
  • Automation: None

chatThreads.update.requested

  • Trigger: Update thread metadata (title, participants)
  • Automation: Chat Worker
  • Automation: Update thread record
  • Output: chatThreads.update.validated

chatThreads.delete.requested

  • Trigger: User deletes conversation
  • Automation: Chat Worker
  • Automation: Soft delete thread + all messages
  • Output: chatThreads.delete.validated

Conversation Messages (9 events)

Purpose: Individual chat messages

conversationMessages.create.requested

  • Trigger: User or AI sends message
  • Automation: Messages Worker
  • Automation: Assign to thread + store + trigger AI (if enabled)
  • Output: conversationMessages.create.validated + message in DB
  • Schema:
{
threadId: string,
content: string,
role: 'user' | 'assistant' | 'system',
metadata?: {
model?: string,
tokens?: number,
reasoning?: object
}
}

🎯 Default Automation: Message Threading

  • Automatically assigns message to thread
  • Creates new thread if threadId not provided
  • Maintains conversation context

conversationMessages.create.validated

  • Trigger: After message created
  • Automation: Insight Detector
  • Automation: Detect action items + entities mentioned
  • Output: AI suggestions

conversationMessages.update.requested

  • Trigger: User edits message
  • Automation: Messages Worker
  • Automation: Update + create edit history
  • Output: conversationMessages.update.validated

Webhook Subscriptions (9 events)

Purpose: External integrations configuration

webhookSubscriptions.create.requested

  • Trigger: User/API creates webhook
  • Automation: Webhooks Worker
  • Automation: Validate URL + store subscription + generate secret
  • Output: webhookSubscriptions.create.validated
  • Schema:
{
name: string,
url: string,
eventTypes: string[], // Event types to subscribe to
secret?: string, // For HMAC validation
retryConfig?: {
maxRetries: number,
backoff: 'exponential' | 'linear'
}
}

webhookSubscriptions.update.requested

  • Trigger: User updates webhook config
  • Automation: Webhooks Worker
  • Automation: Update subscription
  • Output: webhookSubscriptions.update.validated

webhookSubscriptions.delete.requested

  • Trigger: User unsubscribes webhook
  • Automation: Webhooks Worker
  • Automation: Soft delete subscription
  • Output: webhookSubscriptions.delete.validated

API Keys (9 events)

Purpose: API authentication

apiKeys.create.requested

  • Trigger: User generates API key
  • Automation: API Keys Worker
  • Automation: Generate key + hash + store
  • Output: apiKeys.create.validated + API key (shown once)
  • Schema:
{
name: string,
scopes: string[], // Permissions
expiresAt?: Date
}

apiKeys.update.requested

  • Trigger: User updates key metadata (name, scopes)
  • Automation: API Keys Worker
  • Automation: Update record
  • Output: apiKeys.update.validated

apiKeys.delete.requested

  • Trigger: User revokes API key
  • Automation: API Keys Worker
  • Automation: Soft delete + invalidate immediately
  • Output: apiKeys.delete.validated

Tags (9 events)

Purpose: User-defined entity labels

tags.create.requested

  • Trigger: User creates tag
  • Automation: Tags Worker
  • Automation: Create tag + assign color
  • Output: tags.create.validated
  • Schema:
{
name: string,
color?: string // Hex color
}

tags.update.requested

  • Trigger: User renames tag or changes color
  • Automation: Tags Worker
  • Automation: Update tag
  • Output: tags.update.validated

tags.delete.requested

  • Trigger: User deletes tag
  • Automation: Tags Worker
  • Automation: Delete tag + remove from all entities
  • Output: tags.delete.validated

Agents (9 events)

Purpose: AI agent configurations

agents.create.requested

  • Trigger: User or system creates AI agent config
  • Automation: Agents Worker
  • Automation: Store agent config + capabilities
  • Output: agents.create.validated
  • Schema:
{
name: string,
type: 'orchestrator' | 'analyzer' | 'extractor' | 'custom',
model?: string,
capabilities?: string[],
permissions?: {
autoApprove?: boolean,
allowedActions?: string[]
}
}

agents.update.requested

  • Trigger: Update agent config
  • Automation: Agents Worker
  • Automation: Update config
  • Output: agents.update.validated

agents.delete.requested

  • Trigger: Disable agent
  • Automation: Agents Worker
  • Automation: Soft delete agent
  • Output: agents.delete.validated

System Events

webhooks.deliver.requested

  • Trigger: Any event (if webhook subscription exists for that event type)
  • Automation: Webhook Broker
  • Automation:
    1. Find all subscriptions for this event type
    2. For each subscription:
      • Build payload
      • Sign with HMAC
      • POST to subscriber URL
      • Retry on failure (3 attempts)
  • Output: HTTP 200 from subscriber (or failure logged)
  • Schema:
{
subscriptionId: string,
event: SynapEvent, // The original event
attempt: number,
timestamp: Date
}

🎯 Default Automation: Event Delivery

  • Guaranteed delivery with retries
  • Exponential backoff: 1s, 4s, 16s
  • Dead letter queue after 3 failures

Event Catalog Summary

CategoryEventsTablesNotes
3-Phase Events819requested + approved + validated
System1-webhook delivery
Total829Production event system

3-Phase Pattern Breakdown:

  • .requested events: 27 (user/AI intent)
  • .approved events: 27 (permission validated)
  • .validated events: 27 (operation complete)

Next Steps