{"id":339569,"date":"2026-07-15T06:01:16","date_gmt":"2026-07-15T06:01:16","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/simple-uptime-monitor-with-heartbeat\/"},"modified":"2026-07-15T06:00:51","modified_gmt":"2026-07-15T06:00:51","slug":"qndrs-availability-heartbeat-monitor","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/qndrs-availability-heartbeat-monitor\/","author":14254762,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.5.1","stable_tag":"3.5.1","tested":"7.0.1","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Qndrs Availability and Heartbeat Monitor","header_author":"Robert E. Kuunders, GPT","header_description":"Monitor website availability and receive alerts by email or Pushover. Manage multiple URLs from the WordPress admin with logging, JSON import\/export, REST support, dashboard refresh and heartbeat monitors.","assets_banners_color":"","last_updated":"2026-07-15 06:00:51","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/qndrs\/uptime-monitor","header_author_uri":"https:\/\/qndrs.nl","rating":0,"author_block_rating":0,"active_installs":0,"downloads":27,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.5.1":{"tag":"3.5.1","author":"Qndrs","date":"2026-07-15 06:00:51"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3608284,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3608284,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.5.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3608284,"resolution":"1","location":"assets","locale":"","width":2856,"height":3227},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3608284,"resolution":"2","location":"assets","locale":"","width":2856,"height":4161}},"screenshots":{"1":"Availability overview with uptime checks and heartbeat monitor status.","2":"Settings page with REST endpoints, heartbeat monitor setup, notifications and import\/export."}},"plugin_section":[262246],"plugin_tags":[4567,5603,4906,18612,29148],"plugin_category":[54,59],"plugin_contributors":[271598],"plugin_business_model":[],"class_list":["post-339569","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-cron","plugin_tags-monitoring","plugin_tags-notifications","plugin_tags-pushover","plugin_tags-uptime","plugin_category-security-and-spam-protection","plugin_category-utilities-and-tools","plugin_contributors-qndrs","plugin_committers-qndrs"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/qndrs-availability-heartbeat-monitor\/assets\/icon-128x128.png?rev=3608284","icon_2x":"https:\/\/ps.w.org\/qndrs-availability-heartbeat-monitor\/assets\/icon-256x256.png?rev=3608284","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/qndrs-availability-heartbeat-monitor\/assets\/screenshot-1.png?rev=3608284","caption":"Availability overview with uptime checks and heartbeat monitor status."},{"src":"https:\/\/ps.w.org\/qndrs-availability-heartbeat-monitor\/assets\/screenshot-2.png?rev=3608284","caption":"Settings page with REST endpoints, heartbeat monitor setup, notifications and import\/export."}],"raw_content":"<!--section=description-->\n<p>Qndrs Availability and Heartbeat Monitor checks external URLs from the WordPress dashboard and can also monitor firewalled clients through outbound heartbeat pings. It supports multiple monitored URLs, per-URL monitoring toggles, email alerts, configurable Pushover alerts, status history, response times, uptime percentages, JSON import\/export, structured logging, heartbeat monitors, and authenticated REST endpoints.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin can optionally send downtime and recovery notifications through Pushover. Pushover is disabled by default and is only used when a site administrator configures Pushover credentials and enables Pushover alerts for a monitor.<\/p>\n\n<p>When Pushover is enabled, the plugin sends an HTTPS POST request to <code>https:\/\/api.pushover.net\/1\/messages.json<\/code>. The request contains the configured Pushover application token, the configured Pushover user or group key, and a notification title\/message with the monitored URL or monitor name, status information, and HTTP status code or error message when available.<\/p>\n\n<p>Pushover API documentation: https:\/\/pushover.net\/api\nPushover terms: https:\/\/pushover.net\/terms\nPushover privacy policy: https:\/\/pushover.net\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/qndrs-availability-heartbeat-monitor<\/code>.<\/li>\n<li>Activate Qndrs Availability and Heartbeat Monitor from the WordPress plugins page.<\/li>\n<li>Open Qndrs Monitor in the WordPress admin menu.<\/li>\n<li>Add one or more URLs and choose notification channels.<\/li>\n<\/ol>\n\n<p>For more reliable checks, configure a real server cron to call <code>wp-cron.php<\/code>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20configure%20pushover%3F\"><h3>How do I configure Pushover?<\/h3><\/dt>\n<dd><p>Configure Pushover credentials from the plugin settings page. Stored credentials are masked and are not included in JSON exports.<\/p>\n\n<p>You can also add these constants to <code>wp-config.php<\/code>; constants take precedence over stored settings:<\/p>\n\n<pre><code>define('PUSHOVER_USER_KEY', 'your-user-key');\ndefine('PUSHOVER_API_TOKEN', 'your-api-token');\n<\/code><\/pre><\/dd>\n<dt id=\"where%20are%20logs%20stored%3F\"><h3>Where are logs stored?<\/h3><\/dt>\n<dd><p>Logs are stored in the WordPress database option <code>qndrs_ahm_logs<\/code> and capped to avoid unbounded growth. The REST log endpoint supports <code>type<\/code>, <code>url<\/code>, <code>date_from<\/code>, <code>date_to<\/code>, <code>page<\/code>, <code>per_page<\/code>, <code>limit<\/code>, and <code>order<\/code> query parameters.<\/p><\/dd>\n<dt id=\"is%20the%20rest%20endpoint%20public%3F\"><h3>Is the REST endpoint public?<\/h3><\/dt>\n<dd><p>No. REST endpoints require a user with the <code>manage_options<\/code> capability or the plugin read-only API token.<\/p><\/dd>\n<dt id=\"how%20do%20heartbeat%20monitors%20work%3F\"><h3>How do heartbeat monitors work?<\/h3><\/dt>\n<dd><p>Create a heartbeat monitor from the settings page. The plugin shows a one-time token and curl example. A client sends outbound HTTPS POST requests to <code>\/wp-json\/qndrs-availability-heartbeat-monitor\/v1\/heartbeat<\/code>; the monitor becomes stale\/down when no ping arrives in time.<\/p>\n\n<p>Detailed heartbeat client examples are included in <code>docs\/heartbeat-monitors.md<\/code>. Dutch documentation is included in <code>docs\/heartbeat-monitors.nl.md<\/code>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.5.1<\/h4>\n\n<ul>\n<li>Renamed the plugin for WordPress.org review with a distinctive Qndrs display name and slug.<\/li>\n<li>Prefixed AJAX actions, REST namespace, cron hooks, options and token headers to avoid naming collisions.<\/li>\n<li>Improved the release zip structure for WordPress plugin uploads.<\/li>\n<\/ul>\n\n<h4>3.5.0<\/h4>\n\n<ul>\n<li>Added heartbeat monitors for firewalled machines, jobs, Home Assistant, NAS devices and internal apps.<\/li>\n<li>Added a token-protected heartbeat REST endpoint with manual token rotation.<\/li>\n<li>Added heartbeat monitor management to the settings page with copyable endpoint and curl examples.<\/li>\n<li>Added documentation for cron, systemd timers, Windows Task Scheduler and Home Assistant heartbeat clients.<\/li>\n<\/ul>\n\n<h4>3.4.0<\/h4>\n\n<ul>\n<li>Added live dashboard refresh without full page reload.<\/li>\n<li>Added optional auto-refresh for the Qndrs Monitor admin dashboard.<\/li>\n<li>Added automatic WordPress dashboard widget refresh with a visual countdown indicator.<\/li>\n<\/ul>\n\n<h4>3.3.0<\/h4>\n\n<ul>\n<li>Added a compact WordPress dashboard widget for monitoring status.<\/li>\n<li>Shows active incidents and non-up URLs directly on the WordPress dashboard.<\/li>\n<li>Added a subtle alarm beacon for active incidents.<\/li>\n<\/ul>\n\n<h4>3.2.0<\/h4>\n\n<ul>\n<li>Added filters and pagination to the REST log endpoint.<\/li>\n<li>Added read-only API token access for filtered log responses.<\/li>\n<li>Documented supported log query parameters in the REST API viewer and README.<\/li>\n<\/ul>\n\n<h4>3.1.1<\/h4>\n\n<ul>\n<li>Fixed dashboard date\/time display to use day-month-year and 24-hour time.<\/li>\n<li>Improved AJAX error handling so HTTP and SSL validation errors are shown clearly.<\/li>\n<li>Sorted active incidents and down URLs to the top of the dashboard list.<\/li>\n<\/ul>\n\n<h4>3.1.0<\/h4>\n\n<ul>\n<li>Added per-URL status history, response time tracking, and uptime percentages.<\/li>\n<li>Added recovery notifications and throttled downtime alerts per incident.<\/li>\n<li>Added configurable retry attempts, request timeout, and down status code ranges.<\/li>\n<\/ul>\n\n<h4>3.0.1<\/h4>\n\n<ul>\n<li>Fixed cron scheduling on activation and settings changes.<\/li>\n<li>Added data normalization for existing and imported URL records.<\/li>\n<li>Added explicit capability checks for AJAX actions.<\/li>\n<li>Improved URL and import validation.<\/li>\n<li>Fixed admin table rendering after AJAX updates.<\/li>\n<li>Hardened JSON log handling and REST log responses for large log files.<\/li>\n<li>Cleaned README encoding and release documentation.<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Updated Dutch language files.<\/li>\n<li>Extended logging for REST access.<\/li>\n<\/ul>\n\n<h4>2.9.0<\/h4>\n\n<ul>\n<li>Added toggle per URL to disable or enable monitoring.<\/li>\n<li>Improved REST implementation and JSON logging.<\/li>\n<li>Added JSON import and export for full configuration.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with URL monitoring and email alerts.<\/li>\n<\/ul>","raw_excerpt":"Monitor websites and heartbeat clients from WordPress with email or Pushover downtime alerts.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/339569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=339569"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/qndrs"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=339569"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=339569"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=339569"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=339569"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=339569"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=339569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}