Skip to content



This hook is called by the "System Check" api.


This runs on a regular basis (currently once a day, as well as whenever the status page is visited or System.check API is called).

Typically your extension would add results by appending one or more CRM_Utils_Check_Message objects to the $messages array. Constructing a CRM_Utils_Check_Message requires the following parameters:

  • Name: A unique string for this type of message (no two messages in the array may have the same name). This will be the name given to a StatusPreference record if your message is hushed or disabled.
  • Description: Long description html string
  • Title: Short title plain text string
  • Severity: A PSR-3 string.
  • Icon: A font-awesome icon string (optional).

See CRM_Utils_Check::checkAll for more details about the system check api.


Introduced in CiviCRM v4.6.3.




  • &$messages CRM_Utils_Check_Message[]: Array of messages your hook can append to
  • $statusNames array|null: If only certain checks were requested, check this array and return early if your messages are not called for.
  • $includeDisabled bool: If your hook skips disabled checks (which it should!) this param tells you to bypass your skippage.


 * Implementation of hook_civicrm_check
 * Add a check to the status page/System.check results if $snafu is TRUE.
function mymodule_civicrm_check(&$messages, $statusNames, $includeDisabled) {

  // Early return if $statusNames doesn't call for our check
  if ($statusNames && !in_array('mymoduleSnafu', $statusNames)) {

  // If performing your check is resource-intensive, consider bypassing if disabled
  if (!$includeDisabled) {
    $disabled = \Civi\Api4\StatusPreference::get()
      ->addWhere('is_active', '=', FALSE)
      ->addWhere('domain_id', '=', 'current_domain')
      ->addWhere('name', '=', 'mymoduleSnafu')
    if ($disabled) {

  $snafu = (1 + 1 == 2); // Perform check here

  if ($snafu) {
    $messages[] = new CRM_Utils_Check_Message(
      ts('Situation normal, all funnied up'),
      ts('SNAFU Found'),
    // Optionally add extended help
    ->addHelp(ts('This text will appear in a help bubble if the user clicks on the help icon.'));