Skip to content

Rule Hooks

Rule hooks are system events that trigger rule components. Each hook executes at a specific point in a resource’s lifecycle, allowing you to validate operations, enforce business logic, or trigger automations.

Hook Categories

Hooks are organized by timing (when they execute) and resource type (which entity they apply to).

By Timing

Before Hooks

Execute before the operation completes - can prevent operations with validation errors:

  • OnOrderBeforeCreated - Before order is created
  • OnOrderBeforeDeleted - Before order is deleted
  • OnPaymentBeforeCreated - Before payment is created
  • OnPaymentBeforeDeleted - Before payment is deleted
  • OnTicketBeforeCreated - Before ticket is created
  • OnTicketBeforeDeleted - Before ticket is deleted
  • OnSkuBeforeCreated - Before SKU is created
  • OnSkuBeforeDeleted - Before SKU is deleted
  • OnAssetBeforeCreated - Before asset is created
  • OnAssetBeforeDeleted - Before asset is deleted

Use for: Validation, preventing invalid state

After Hooks

Execute after the operation completes - changes are persisted:

  • OnOrderCreated - After order is created
  • OnOrderDeleted - After order is deleted
  • OnPaymentCreated - After payment is created
  • OnPaymentDeleted - After payment is deleted
  • OnPaymentCapture - After payment is captured
  • OnTicketCreated - After ticket is created
  • OnTicketDeleted - After ticket is deleted
  • OnTicketComplete - After ticket is completed
  • OnTicketRejected - After ticket is rejected
  • OnSkuCreated - After SKU is created
  • OnSkuDeleted - After SKU is deleted
  • OnAssetCreated - After asset is created
  • OnAssetDeleted - After asset is deleted

Use for: Automation, notifications, integrations

Command Hooks

Execute when commands are applied to an actor:

  • OnOrderCommands - When commands applied to order
  • OnPaymentCommands - When commands applied to payment
  • OnTicketCommands - When commands applied to ticket
  • OnSkuCommands - When commands applied to SKU
  • OnAssetCommands - When commands applied to asset

Use for: Cascading logic, deriving additional changes

Journal Hooks

Execute when journal entries are created:

  • OnOrderJournal - When order journal entry created
  • OnPaymentJournal - When payment journal entry created

Use for: Audit trail reactions, logging

By Resource Type

Currently available hooks focus on actor lifecycle events:

Order Hooks (6 hooks)

  • OnOrderBeforeCreated
  • OnOrderCreated
  • OnOrderBeforeDeleted
  • OnOrderDeleted
  • OnOrderCommands
  • OnOrderJournal

Payment Hooks (7 hooks)

  • OnPaymentBeforeCreated
  • OnPaymentCreated
  • OnPaymentBeforeDeleted
  • OnPaymentDeleted
  • OnPaymentCommands
  • OnPaymentCapture
  • OnPaymentJournal

Ticket Hooks (8 hooks)

  • OnTicketBeforeCreated
  • OnTicketCreated
  • OnTicketBeforeDeleted
  • OnTicketDeleted
  • OnTicketCommands
  • OnTicketComplete
  • OnTicketRejected

Sku Hooks (5 hooks)

  • OnSkuBeforeCreated
  • OnSkuCreated
  • OnSkuBeforeDeleted
  • OnSkuDeleted
  • OnSkuCommands

Asset Hooks (5 hooks)

  • OnAssetBeforeCreated
  • OnAssetCreated
  • OnAssetBeforeDeleted
  • OnAssetDeleted
  • OnAssetCommands

Hook Execution Order

For a single operation, hooks execute in this order:

  1. BeforeCreated hooks (can prevent operation)
  2. Operation executes (entity created, commands applied)
  3. Commands hooks (can add more commands)
  4. Created/Deleted hooks (automation and notifications)
  5. Journal hooks (if journal entry created)

Example for creating an order:

  1. OnOrderBeforeCreated - Validate order
  2. Order created in database
  3. OnOrderCreated - Send confirmation email
  4. OnOrderJournal - Log journal entry (if created)

Hook Data & Supported Effects

Each hook receives relevant data about the event and supports specific effects:

hook OnOrderCreated
// 'order' variable available with current order state
hook OnPaymentCapture
// 'payment' variable available
hook OnTicketComplete
// 'ticket' variable available

Important: Each hook supports different sets of effects. For example:

  • Before hooks typically support validationError and actor commands
  • After hooks typically support messageActor, scheduleJob, and actor commands
  • Command hooks typically support actor commands only

See individual hook documentation in the Runtime Reference for exact supported effects in each hook context.

Choosing the Right Hook

Use Before Hooks When:

  • Validating input before operations complete
  • Preventing invalid state changes
  • Checking business rule constraints
  • Ensuring data integrity

Use After Hooks When:

  • Sending notifications
  • Triggering external integrations
  • Creating related entities
  • Scheduling follow-up work

Use Command Hooks When:

  • Deriving additional changes from commands
  • Applying cascading updates
  • Enforcing command combinations

Examples

Validation with Before Hook

param input: OnOrderBeforeCreated
let hasValidDelivery = input.order.deliveries count > 0
from hasValidDelivery match
false |> {
effect = 'validationError'
code = 'NO_DELIVERY'
message = 'Order must have at least one delivery'
}

Automation with After Hook

param input: OnTicketComplete
from {
effect = 'messageActor'
actorType = 'order'
actorId = input.ticket.orderId
messages = [{
type = 'applyCommands'
body = {
commands = [{
type = 'addTag'
value = 'support-resolved'
}]
}
}]
}

Cascading with Command Hook

param input: OnOrderCommands
let hasCancellation = input.order.commands
any c => c.type = 'cancel'
from hasCancellation match
true |> {
effect = 'orderCommand'
type = 'addTag'
value = 'cancelled'
}

See Also