Skip to content

Event Hooks

Event hooks let your module or theme respond to actions in FOSSBilling — like when a client signs up, an order is placed, or cron runs.

If you are building the module that will receive these hooks, start with Creating a Module.

FOSSBilling fires events at key moments. You can register handlers to run your code when these events fire.

Hook names follow this pattern:

  • onBefore{Action} — Runs before the action
  • onAfter{Action} — Runs after the action
  • onEvent{Description} — Fires when a specific event occurs

The Hook module also supports onEveryEvent, a global listener that is connected to every fired event.

  • onBeforeAdminActivateExtension
  • onAfterAdminActivateExtension
  • onBeforeAdminDeactivateExtension
  • onAfterAdminDeactivateExtension
  • onBeforeAdminInstallExtension
  • onAfterAdminInstallExtension
  • onBeforeAdminUninstallExtension
  • onAfterAdminUninstallExtension
  • onBeforeAdminUpdateExtension
  • onAfterAdminUpdateExtension
  • onBeforeAdminExtensionConfigSave
  • onAfterAdminExtensionConfigSave
  • onBeforeAdminClientCreate
  • onAfterAdminClientCreate
  • onBeforeAdminCreateClient
  • onAfterAdminCreateClient
  • onBeforeAdminClientDelete
  • onAfterAdminClientDelete
  • onBeforeAdminClientPasswordChange
  • onAfterAdminClientPasswordChange
  • onBeforeAdminClientUpdate
  • onAfterAdminClientUpdate
  • onBeforeAdminOrderActivate
  • onAfterAdminOrderActivate
  • onBeforeAdminOrderCancel
  • onAfterAdminOrderCancel
  • onBeforeAdminOrderCreate
  • onAfterAdminOrderCreate
  • onBeforeAdminOrderDelete
  • onAfterAdminOrderDelete
  • onBeforeAdminOrderRenew
  • onAfterAdminOrderRenew
  • onBeforeAdminOrderSuspend
  • onAfterAdminOrderSuspend
  • onBeforeAdminOrderUncancel
  • onAfterAdminOrderUncancel
  • onBeforeAdminOrderUnsuspend
  • onAfterAdminOrderUnsuspend
  • onBeforeAdminOrderUpdate
  • onAfterAdminOrderUpdate
  • onBeforeAdminBatchSuspendOrders
  • onAfterAdminBatchSuspendOrders
  • onBeforeAdminBatchCancelSuspendedOrders
  • onAfterAdminBatchCancelSuspendedOrders
  • onBeforeAdminInvoiceApprove
  • onAfterAdminInvoiceApprove
  • onBeforeAdminInvoiceDelete
  • onAfterAdminInvoiceDelete
  • onBeforeAdminInvoiceRefund
  • onAfterAdminInvoiceRefund
  • onBeforeAdminInvoiceSendReminder
  • onBeforeAdminInvoiceSendReminders
  • onAfterAdminInvoiceReminderSent
  • onBeforeAdminInvoiceUpdate
  • onAfterAdminInvoiceUpdate
  • onAfterAdminInvoicePaymentReceived
  • onBeforeAdminGenerateRenewalInvoice
  • onAfterAdminGenerateRenewalInvoice
  • onEventBeforeInvoiceIsDue
  • onEventAfterInvoiceIsDue
  • onAfterAdminSubscriptionCreate
  • onAfterAdminSubscriptionDelete
  • onBeforeAdminTransactionCreate
  • onAfterAdminTransactionCreate
  • onBeforeAdminTransactionProcess
  • onAfterAdminTransactionProcess
  • onBeforeAdminTransactionUpdate
  • onAfterAdminTransactionUpdate
  • onBeforeAdminOpenTicket
  • onAfterAdminOpenTicket
  • onAfterAdminCloseTicket
  • onAfterAdminReplyTicket
  • onBeforeAdminPublicTicketOpen
  • onAfterAdminPublicTicketOpen
  • onAfterAdminPublicTicketClose
  • onAfterAdminPublicTicketReply
  • onBeforeAdminStaffCreate
  • onAfterAdminStaffCreate
  • onBeforeAdminStaffDelete
  • onAfterAdminStaffDelete
  • onBeforeAdminStaffPasswordChange
  • onAfterAdminStaffPasswordChange
  • onBeforeAdminStaffApiKeyChange
  • onAfterAdminStaffApiKeyChange
  • onBeforeAdminStaffUpdate
  • onAfterAdminStaffUpdate
  • onBeforeAdminStaffProfileUpdate
  • onAfterAdminStaffProfileUpdate
  • onBeforeAdminStaffProfilePasswordChange
  • onAfterAdminStaffProfilePasswordChange
  • onBeforeAdminCronRun
  • onAfterAdminCronRun
  • onBeforeAdminDeleteCurrency
  • onAfterAdminDeleteCurrency
  • onBeforeAdminSettingsUpdate
  • onAfterAdminSettingsUpdate
  • onAfterAdminNotificationAdd
  • onBeforeAdminUpdateCore
  • onAfterAdminUpdateCore
  • onBeforeAdminManualUpdate
  • onAfterAdminManualUpdate
  • onBeforeThemeSettingsSave
  • onBeforeAdminLogin
  • onAfterAdminLogin
  • onEventAdminLoginFailed
  • onBeforePasswordResetStaff
  • onAfterPasswordResetStaff
  • onBeforeClientSignUp
  • onAfterClientSignUp
  • onBeforeClientLogin
  • onAfterClientLogin
  • onEventClientLoginFailed
  • onBeforeClientProfileUpdate
  • onAfterClientProfileUpdate
  • onBeforeClientProfilePasswordChange
  • onAfterClientProfilePasswordChange
  • onBeforeClientProfilePasswordReset
  • onAfterClientProfilePasswordReset
  • onBeforePasswordResetClient
  • onBeforeProductAddedToCart
  • onAfterProductAddedToCart
  • onBeforeClientCheckout
  • onAfterClientOrderCreate
  • onBeforeClientOpenTicket
  • onAfterClientOpenTicket
  • onAfterClientCloseTicket
  • onAfterClientReplyTicket
  • onBeforeClientChangeNameservers
  • onAfterClientChangeNameservers
  • onBeforeGuestPasswordResetRequest
  • onBeforeGuestPublicTicketOpen
  • onAfterGuestPublicTicketOpen
  • onAfterGuestPublicTicketClose
  • onAfterGuestPublicTicketReply
  • onBeforeServicelicenseReset
  • onAfterServicelicenseReset

Define static methods in your module's Service.php:

class Service
{
public static function onAfterAdminOrderCreate(\Box_Event $event): void
{
$order = $event->getSubject();
error_log('New order created: ' . $order->id);
}
public static function onBeforeAdminCronRun(\Box_Event $event): void
{
}
}

FOSSBilling automatically discovers and calls these hooks when the events fire.

FOSSBilling discovers hook methods when cron jobs run. If you add a new hook handler in a module, cron must run at least once before the hook is registered.

If a new hook is not being called:

  • Confirm cron is configured and running correctly.
  • During development, run cron jobs manually once after adding or renaming hook methods.
  • Make sure the hook method is public and accepts a \Box_Event argument.