📚 Dead Air Monitor Documentation

Complete guide to monitoring your streams and using the API

🚀 Getting Started

Dead Air Monitor provides real-time monitoring for your audio streams with instant alerts when dead air is detected.

Quick Start

  1. Sign up for a free account
  2. Verify your email address
  3. Add your stream URL (Icecast, Shoutcast, etc.)
  4. Configure notification settings
  5. Start monitoring!

Supported Stream Formats

📊 Monitoring Features

Two-Tier Checking System

Quick Checks: Fast HTTP connection tests (2-3 seconds)

Deep Checks: Full audio analysis to detect silence and dead air (20 seconds)

Check Frequencies by Plan

Plan Connectivity Checks Silence Detection Checks
Free Every 30 minutes Every 60 minutes
Basic Every 10 minutes Every 20 minutes
Professional Every 2 minutes Every 4 minutes
Enterprise Every 1 minute Every 2 minutes
Custom Every 1 minute Every 2 minutes

⚡ Smart Detection: If a connectivity check fails, an immediate silence detection check is performed for instant verification!

Two-Worker Confirmation

To prevent false alarms, when a stream is detected as down:

  1. Worker detects stream down (quick check)
  2. Stream marked as "pending verification"
  3. Different worker performs deep check for confirmation
  4. Only if both workers confirm → Stream marked as DOWN
  5. Notifications sent to user

Stream Type Detection

Dead Air Monitor adapts its silence detection based on your stream type to minimize false alarms. Choose the type that best matches your content:

Stream Type Best For Why This Matters
🎵 Music Station Music-only streams, radio stations playing songs Music has consistent audio levels. Short pauses between songs are normal, but 5+ seconds of silence indicates dead air.
🗣️ Talk Radio / Talk Show Talk shows, podcasts, news, sports commentary Talk shows have natural pauses between speakers, questions, and responses. Higher threshold prevents false alarms from normal conversation gaps.
🎤 Hybrid (Music + Talk) Stations mixing music with DJ commentary, interviews, or ads Combines the best of both: sensitive enough to catch dead air during music, but tolerant of natural pauses during talk segments.
đź’ˇ Pro Tip: If you're getting false alarms, try switching to "Talk Radio" mode. If you're missing dead air during music segments, use "Music Station" mode. The stream type can be changed anytime from your stream settings.

đź”” Notification Methods

Timezone

Set your local timezone in Dashboard → Settings. This affects:

The timezone setting does not apply to webhooks or the API. Webhook payloads and API responses use UTC (ISO 8601) for timestamps. Convert them to your local time in your own integration if needed.

Configure: Dashboard → Settings → Time zone

Email Notifications (All Plans)

Receive email alerts when your stream goes down or comes back up.

Configure: Dashboard → Settings → Email Notifications

Pushover Notifications BASIC+

Push notifications to your phone via Pushover app.

Requirements:

Click here for step-by-step setup of Pushover.

Configure: Dashboard → Settings → Pushover Notifications

Webhook Notifications Professional+

POST JSON data to your custom webhook URL when stream status changes.

How to set up Zapier to send SMS notifications when your stream is down?

Payload Example:

{
  "event": "stream_down",
  "stream": {
    "id": 123,
    "name": "My Radio Stream",
    "url": "http://stream.example.com:8000",
    "status": "down",
    "old_status": "up"
  },
  "timestamp": "2025-10-21T19:30:00Z"
}

Events:

What you can automate with Dead Air Monitor's webhook

🔌 API Access Enterprise

Programmatically access your stream monitoring data using our REST API.

⚠️ API Access Required

API access is available on Enterprise plans only. Upgrade to get your API key.

Getting Your API Key

  1. Go to Dashboard → Settings
  2. Scroll to "API Access" section
  3. Copy your API key
  4. Keep it secret! Don't share publicly

Authentication

Include your API key in the request header:

X-API-Key: your_api_key_here

Or as a query parameter:

?api_key=your_api_key_here

Stream identification: stream_hash

All user API endpoints use the stream hash to identify streams. The stream hash is a unique, non-guessable 64-character hex string (e.g. 54e5322a0e0fb6796aa23ba64d6832b1ffea902d20cd5cf4425dfef1eea2ea70). Use it in URLs and when requesting a single stream. You get each stream's stream_hash from the list endpoint, or from your monitored stream details in the dashboard.

API Endpoints

GET/api/user/streams

Get all your streams. Returns stream_hash, name, url, and created_at for each stream.

Example Request:

curl -H "X-API-Key: your_api_key_here" \
  https://deadairmonitor.com/api/user/streams

Response:

{
  "success": true,
  "streams": [
    {
      "stream_hash": "54e5322a0e0fb6796aa23ba64d6832b1ffea902d20cd5cf4425dfef1eea2ea70",
      "name": "My Radio Stream",
      "url": "http://stream.example.com:8000",
      "created_at": "2025-10-21T14:45:47.000Z"
    }
  ]
}

GET/api/user/streams/:stream_hash

Get detailed status for one stream. Use the stream_hash from the list response.

Example Request:

curl -H "X-API-Key: your_api_key_here" \
  https://deadairmonitor.com/api/user/streams/54e5322a0e0fb6796aa23ba64d6832b1ffea902d20cd5cf4425dfef1eea2ea70

Response:

{
  "success": true,
  "stream": {
    "stream_hash": "54e5322a0e0fb6796aa23ba64d6832b1ffea902d20cd5cf4425dfef1eea2ea70",
    "name": "My Radio Stream",
    "url": "http://stream.example.com:8000",
    "status": "up",
    "last_check": 1729530615,
    "metadata": "Now Playing - Artist Name"
  }
}

last_check is a Unix timestamp (seconds).

Status Values

Status Description
up Stream is online and broadcasting
down Stream is offline or unreachable
unknown Stream hasn't been checked yet

Rate Limits

API requests are limited to 100 requests per 15 minutes per IP address.

🎨 Embeddable Widgets

Display your stream status on your website with our embeddable widget.

How to Embed

  1. Go to Dashboard
  2. Click "View Details" on your stream
  3. Copy the embed code (coming soon)
  4. Paste into your website HTML

Widget URL:

Use your stream's stream hash (found in Dashboard or from GET /api/user/streams):

https://deadairmonitor.com/widget/display/[YOUR_STREAM_HASH]

Embed Code Example:

<iframe src="https://deadairmonitor.com/widget/display/54e5322a0e0fb6796aa23ba64d6832b1ffea902d20cd5cf4425dfef1eea2ea70" 
        width="300" 
        height="150" 
        frameborder="0" 
        style="border-radius: 8px;">
</iframe>

Widget JSON API

Get stream status as JSON for custom widgets (use your stream hash):

https://deadairmonitor.com/widget/api/[YOUR_STREAM_HASH]

Response:

{
  "name": "My Radio Stream",
  "status": "up",
  "last_check": "2025-10-21 19:30:15",
  "metadata": "Current Song",
  "uptime": "99.9%"
}

đź’° Pricing & Features

Feature Free Basic Professional Enterprise Custom
Price FREE $1.99/mo $3.49/mo $4.99/mo Contact
Max Streams 1 1 2 3 Unlimited
Connectivity Checks Every 30 min Every 10 min Every 2 min Every 1 min Every 1 min
Silence Detection Checks Every 60 min Every 20 min Every 4 min Every 2 min Every 2 min
Email Alerts âś“ âś“ âś“ âś“ âś“
Pushover Alerts - âś“ âś“ âś“ âś“
Webhook Integration - - âś“ âś“ âś“
Metadata Tracking - âś“ âś“ âś“ âś“
API Access - - - âś“ âś“
History Retention 1 days 7 days 28 days 60 days 365 days

View current pricing →

âť“ Frequently Asked Questions

How does the monitoring work?

We have distributed worker nodes in multiple regions that check your stream using two methods:

What happens when my stream goes down?

  1. Worker detects stream is down
  2. Different worker confirms with deep check (prevents false positives)
  3. Notifications sent via your configured methods
  4. Continuous monitoring until stream is back
  5. "Stream Back Up" notification when restored

Can I upgrade or downgrade anytime?

Yes! Changes take effect immediately. Stream check intervals update automatically when you change plans.

What if I cancel my subscription?

You'll retain access to your paid features until the end of your current billing period. After that, you'll automatically downgrade to the Free tier.

How do I get support?

Use Support tickets for technical help, billing questions, suggestions, or any other communication: go to Dashboard → Support and create a new ticket. You can also email us at [email protected]. See the Support tickets section for the full guide.

đź’» Code Examples

JavaScript/Node.js

// List streams, then get status for one by stream_hash
const listRes = await fetch('https://deadairmonitor.com/api/user/streams', {
  headers: { 'X-API-Key': 'your_api_key_here' }
});
const { streams } = (await listRes.json());
const streamHash = streams[0].stream_hash;

const response = await fetch(
  `https://deadairmonitor.com/api/user/streams/${streamHash}`,
  { headers: { 'X-API-Key': 'your_api_key_here' } }
);
const data = await response.json();
console.log('Stream status:', data.stream.status);

Python

import requests

headers = {'X-API-Key': 'your_api_key_here'}
# List streams to get stream_hash for each
streams = requests.get(
    'https://deadairmonitor.com/api/user/streams',
    headers=headers
).json()['streams']
stream_hash = streams[0]['stream_hash']

response = requests.get(
    f'https://deadairmonitor.com/api/user/streams/{stream_hash}',
    headers=headers
)
data = response.json()
print('Stream status:', data['stream']['status'])

PHP

$apiKey = 'your_api_key_here';
$streamHash = '54e5322a0e0fb6796aa23ba64d6832b1ffea902d20cd5cf4425dfef1eea2ea70';

$ch = curl_init("https://deadairmonitor.com/api/user/streams/$streamHash");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: $apiKey"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
$data = json_decode($response, true);
echo 'Stream status: ' . $data['stream']['status'];

Bash/Shell Script

#!/bin/bash
API_KEY="your_api_key_here"
# Use the stream_hash from GET /api/user/streams (e.g. first stream)
STREAM_HASH="54e5322a0e0fb6796aa23ba64d6832b1ffea902d20cd5cf4425dfef1eea2ea70"

STATUS=$(curl -s -H "X-API-Key: $API_KEY" \
  "https://deadairmonitor.com/api/user/streams/$STREAM_HASH" \
  | jq -r '.stream.status')

if [ "$STATUS" == "up" ]; then
  echo "âś“ Stream is UP"
else
  echo "âś— Stream is DOWN"
fi

📱 How to Set Up a Pushover.net Account

Follow these steps to create a Pushover account and get your User Key for receiving alerts on your phone or desktop.

  1. Go to Pushover. Open pushover.net in your browser.
  2. Create an account. Click Login/Sign Up and then click the create a new account link. Enter your email address and a password. Complete sign-up and verify your email if prompted.
  3. Log in. Sign in at pushover.net with your new account.
  4. Find your User Key. After logging in, your User Key is shown on the main dashboard (a long string of letters and numbers). Copy it — you’ll paste this into Dead Air Monitor.
  5. Install the Pushover app. On your phone, install the Pushover app from the App Store (iOS) or Google Play (Android). You can also use the desktop clients if you prefer.
  6. Log in on your device. Open the Pushover app and sign in with the same account. Your device will then receive messages sent to your User Key.
  7. Add your User Key to Dead Air Monitor. In Dead Air Monitor go to Dashboard → Settings → Pushover Notifications, enable Pushover, and paste your User Key. Save and use the Test notifications button to confirm you receive a test alert.

One-time purchase of the Pushover app may be required on your platform. Check pushover.net for current pricing.

📲 How to Set Up Zapier to Send SMS When Your Stream Is Down

Use Zapier to connect Dead Air Monitor’s webhook to an SMS action so you get a text when your stream goes down (or comes back up).

  1. Create a Zapier account. Go to zapier.com, click Sign up, and enter your email and a password (or sign up with Google/Apple). Verify your email if prompted.
  2. Log in and create a new Zap. After signing in, click Create Zap (or use the + button). You’ll set up a trigger and an action.
  3. Choose the webhook trigger. In the trigger step, search for Webhooks by Zapier and select it. Choose the trigger Catch Hook. Click Continue. Zapier will show a Custom Webhook URL — copy this URL (you’ll paste it into Dead Air Monitor in a later step). Click Continue and leave the Zap in “waiting for a test” for now.
  4. Add the webhook URL to Dead Air Monitor. Open Dead Air Monitor in another tab. Go to Dashboard → Settings, scroll to Webhook Notifications, enable the webhook, and paste the Zapier URL into the Webhook URL field. Click Save. Then click Test notifications so Dead Air Monitor sends a test webhook. Return to Zapier and click Test trigger — Zapier should receive the test and show the payload (e.g. event, stream, timestamp).
  5. Add a filter (optional but recommended). To send SMS only when the stream goes down, add a Filter step: choose Only continue if, set (Trigger) stream.status equals down. That way you don’t get an SMS when the stream comes back up unless you want to. Skip this if you want SMS for both down and back-up.
  6. Add the SMS action. Click + to add an action. Search for SMS or Twilio (or your preferred SMS app). Select it and sign in/connect your account if asked. Choose an action like Send SMS or Send an SMS message. In the message body, you can use data from the webhook, e.g. Stream {{stream.name}} is {{stream.status}}. {{stream.url}} (Zapier will map the fields from the test). Enter your phone number and complete the action setup.
  7. Turn on the Zap. Click Publish or Turn on Zap. From now on, when Dead Air Monitor sends a webhook (e.g. stream down or back up), Zapier will receive it and run your Zap; with the filter, only “stream down” events will trigger the SMS.

Zapier’s free plan includes a limited number of tasks per month. SMS actions may require a paid Zapier plan or a connected SMS provider (e.g. Twilio). Check zapier.com and your SMS app for pricing.

đź“§ Email Notification Pausing

To protect your inbox and give you time to fix stream issues, we may temporarily pause email notifications for a stream when we detect multiple errors over a short period. This helps prevent your inbox from filling up with repeated alerts and gives you a chance to rectify the problem with your stream.

What is affected: Only the sending of stream down/up email alerts for that stream is paused. We do not stop monitoring your stream. Checks continue as usual, and your dashboard and history stay up to date. Any other notification methods you have set up (e.g. Pushover, webhook) continue to receive alerts as normal.

You will be notified: When we pause email notifications for a stream, we send you one email to let you know that email alerts for that stream have been paused, why (multiple errors detected), and that we are still monitoring the stream and your other notification channels are unchanged. Once the pause period ends, email notifications for that stream resume automatically.

If you have questions or need help resolving a stream issue, contact us at [email protected].

🎫 Support Tickets

Use Support tickets for any communication with us: technical help, account or billing questions, feature suggestions, or general feedback. All conversations are kept in one place so we can help you quickly and you can refer back to them anytime.

What to use tickets for

How to use Support tickets

Open the Support page: From the main navigation, click Support, or go to Dashboard → Support. You’ll see all your tickets (open and closed).

Creating a new ticket

  1. Click + New ticket on the Support page.
  2. Enter a short Subject (e.g. “Stream always showing down” or “Billing question”).
  3. Write your Message with as much detail as you can (stream URL, what you’ve tried, when it started, etc.).
  4. Click Create ticket. We’ll get your message and reply in the same thread.

Replying and keeping the conversation going

When we reply, you’ll see the message in the ticket. Open the ticket and use the reply box to add more information or ask follow-up questions. You’ll get email notifications when we respond so you don’t have to check the dashboard constantly. Once your issue is resolved or your question is answered, we may close the ticket; you can open a new one anytime for a new topic.

💡 Tip: For the fastest help, include your stream URL, plan, and what you’ve already tried when opening a technical ticket. For billing questions, your account email is enough — we’ll look up the rest.

đź’¬ Need Help?

We're here to help!