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 createdOnOrderBeforeDeleted- Before order is deletedOnPaymentBeforeCreated- Before payment is createdOnPaymentBeforeDeleted- Before payment is deletedOnTicketBeforeCreated- Before ticket is createdOnTicketBeforeDeleted- Before ticket is deletedOnSkuBeforeCreated- Before SKU is createdOnSkuBeforeDeleted- Before SKU is deletedOnAssetBeforeCreated- Before asset is createdOnAssetBeforeDeleted- Before asset is deleted
Use for: Validation, preventing invalid state
After Hooks
Execute after the operation completes - changes are persisted:
OnOrderCreated- After order is createdOnOrderDeleted- After order is deletedOnPaymentCreated- After payment is createdOnPaymentDeleted- After payment is deletedOnPaymentCapture- After payment is capturedOnTicketCreated- After ticket is createdOnTicketDeleted- After ticket is deletedOnTicketComplete- After ticket is completedOnTicketRejected- After ticket is rejectedOnSkuCreated- After SKU is createdOnSkuDeleted- After SKU is deletedOnAssetCreated- After asset is createdOnAssetDeleted- After asset is deleted
Use for: Automation, notifications, integrations
Command Hooks
Execute when commands are applied to an actor:
OnOrderCommands- When commands applied to orderOnPaymentCommands- When commands applied to paymentOnTicketCommands- When commands applied to ticketOnSkuCommands- When commands applied to SKUOnAssetCommands- 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 createdOnPaymentJournal- 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:
- BeforeCreated hooks (can prevent operation)
- Operation executes (entity created, commands applied)
- Commands hooks (can add more commands)
- Created/Deleted hooks (automation and notifications)
- Journal hooks (if journal entry created)
Example for creating an order:
OnOrderBeforeCreated- Validate order- Order created in database
OnOrderCreated- Send confirmation emailOnOrderJournal- 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 availableImportant: Each hook supports different sets of effects. For example:
- Before hooks typically support
validationErrorand 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
- Rules Overview - Introduction to rules
- Rule Effects - Available effects
- Common Patterns - Recipe-style examples
- Runtime Reference - Detailed hook documentation