> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apex-services.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Bus Job hooks

> Every hook exposed by apex-bus-job/hooks.lua.

Source: `apex-bus-job/hooks.lua` (unencrypted). Hooks live under the `ApexBusJob.Hooks` namespace.

<AccordionGroup>
  <Accordion title="Hooks.Notify(source, message, notifyType)" icon="bell">
    **Side:** client. Default `lib.notify`, falls back to `ESX.ShowNotification`.
  </Accordion>

  <Accordion title="Hooks.ServerNotify(source, message, notifyType)" icon="bell">
    **Side:** server. Default `xPlayer.showNotification` → `esx:showNotification`.
  </Accordion>

  <Accordion title="Hooks.ShowHelpPrompt(key, message)" icon="comment">
    **Side:** client. Default `lib.showTextUI` with native fallback.
  </Accordion>

  <Accordion title="Hooks.HideHelpPrompt(key)" icon="comment-slash">
    **Side:** client. Default `lib.hideTextUI`.
  </Accordion>

  <Accordion title="Hooks.OnQuestProgress(source, questName, amount)" icon="trophy">
    **Side:** server. Default no-op. Wire into your quest / pause-menu system.
  </Accordion>

  <Accordion title="Hooks.HasBusLicense(source)" icon="id-card">
    **Side:** server. Return `true` (allowed) / `false, reasonKey`. Default returns `nil`, which falls back to the resource's built-in `ox_inventory` driver-license search. Set `Config.RequireLicense = false` to skip the check.

    ```lua theme={null}
    function ApexBusJob.Hooks.HasBusLicense(source)
        local hasLicense = exports['my-license-system']:hasBusLicense(source)
        if not hasLicense then return false, 'no_bus_license' end
        return true
    end
    ```
  </Accordion>
</AccordionGroup>
