Shoutcast Net API Integration Guide for Custom Apps (Shoutcast Net API)
If you’re building a custom dashboard for your station, a mobile app for your congregation, a campus radio control panel, or a live-event “Now Playing” overlay, the Shoutcast Net API helps you connect your software to your streaming server in a clean, automated way. This tutorial walks radio DJs, music streamers, podcasters, church broadcasters, school radio stations, and live event streamers through a practical, step-by-step integration approach.
You’ll learn how to prepare your environment, obtain credentials, authenticate securely, read real-time station stats, update metadata, and automate scheduling/alerts. Along the way, we’ll highlight why Shoutcast Net is a strong fit for production apps: $4/month starting price, unlimited listeners, 99.9% uptime, SSL streaming, and a 7 days trial—without Wowza’s expensive per-hour/per-viewer billing model or the painful limitations common in legacy Shoutcast setups.
What you’ll build
- • A secure API client that reads Now Playing and listener counts
- • A station status widget (online/offline, bitrate, mount/stream name)
- • Optional: metadata updates and basic stream controls
- • Optional: AutoDJ scheduling and alerts for outages
Shoutcast Net is built so you can stream from any device to any device and even bridge any stream protocols to any stream protocols (RTMP, RTSP, WebRTC, SRT, etc) depending on your workflow—ideal for modern broadcasting apps.
Table of Contents
- Prerequisites: What you need before you call the API
- Step 1–2: Create your server and get API credentials
- Step 3: Authenticate safely (tokens, IP allowlists, HTTPS)
- Step 4–6: Read Now Playing, listeners, and stream status
- Step 7–8: Update metadata and control your stream
- Step 9–10: Automate with AutoDJ, scheduling, and alerts
Prerequisites: What you need before you call the API
Before you write your first request, set up a few basics so your integration is reliable and secure. Most “API problems” in broadcasting apps come from missing SSL, mixing up server ports, or trying to call admin endpoints from a public frontend.
Checklist for DJs, stations, and developers
- • An active Shoutcast Net service (start with a 7 days trial if you want to test).
- • Your stream server hostname, port(s), and stream identifier (mount/stream name depends on your configuration).
- • A plan that matches your workflow (for example, AutoDJ if you want scheduling and 24/7 playback).
- • A server-side runtime for API calls (Node.js, PHP, Python, Go). Avoid calling admin endpoints directly from a browser or mobile app.
- • A place to store secrets safely (environment variables, a secrets manager, or encrypted config).
Why Shoutcast Net fits custom apps better than “legacy” setups
If you’ve struggled with older Shoutcast-era workflows, you already know the pain: limited automation, awkward metadata handling, and brittle admin patterns. Shoutcast Net modernizes the hosting experience and focuses on what stations need in 2026: SSL streaming, dashboards, automation support, and unlimited listeners on a flat-rate unlimited model.
It’s also a cost win versus Wowza’s expensive per-hour/per-viewer billing approach—especially for church services, school stations, and live events where audience size can spike unpredictably.
Latency and protocol notes (useful for app UX)
If your custom app includes chat synchronization, live captions, “song request” timing, or a real-time sermon slide follow-along, you’ll care about latency. Many workflows target very low latency 3 sec for interactive experiences. Shoutcast Net’s hosting and tooling support modern streaming patterns so you can stream from any device to any device and bridge any stream protocols to any stream protocols (RTMP, RTSP, WebRTC, SRT, etc) when your production requires it.
Pro Tip
Build your app with a small “API gateway” service (even a simple serverless function). Your frontend calls your gateway, and the gateway calls the Shoutcast Net API with secrets. This prevents credential leaks and makes it easy to add rate limiting, caching, and logging.
Step 1–2: Create your server and get API credentials
This section covers two actions: (1) create your Shoutcast Net server, and (2) collect the exact connection details your custom app will use. Even if you’re already streaming, it’s worth organizing these values into a single config object so your API integration stays consistent.
Step 1: Spin up your Shoutcast Net service
Choose a plan that matches your stream type (music radio, talk/podcast live, church service, school radio, or live events). Shoutcast Net plans start at $4/month and include the benefits broadcasters care about: 99.9% uptime, SSL streaming, and unlimited listeners—without surprise overage fees.
- • Start here: Shoutcast hosting
- • If you need 24/7 automation: AutoDJ
- • If you’re comparing alternatives: Icecast hosting
- • Ready to deploy immediately: Shop plans
Step 2: Collect the values your API client needs
In your station control panel, locate the server details your app will reference. At minimum, record:
- • Host (e.g.,
yourstation.shoutcastnet.com) - • Port (stream port and, if applicable, an admin/API port)
- • Stream identifier (stream ID, mount, or endpoint depending on your setup)
- • Credentials (API token/password/keys as provided in your panel)
- • SSL URL (https endpoint for your API calls and secure player links)
Recommended configuration format
Store your integration settings as environment variables (preferred) and map them into a single config object in your application:
// Example: Node.js config (do not commit real secrets)
export const shoutcastNet = {
baseUrl: process.env.SCNET_BASE_URL, // e.g., https://yourpanel-or-api-host
stationId: process.env.SCNET_STATION_ID, // if your plan uses station identifiers
apiToken: process.env.SCNET_API_TOKEN, // token/secret from your control panel
streamHost: process.env.SCNET_STREAM_HOST,
streamPort: Number(process.env.SCNET_STREAM_PORT || 0),
useSsl: process.env.SCNET_USE_SSL === "true",
};
This makes it easy to deploy the same code to multiple stations (for example, a school district with several campuses) by swapping environment variables.
Pro Tip
If you plan to Restream to Facebook, Twitch, YouTube, keep your “distribution” settings separate from your “station API” settings. That way your app can show station health/Now Playing while your video restream workflow evolves independently.
Step 3: Authenticate safely (tokens, IP allowlists, HTTPS)
Authentication is where many broadcasters accidentally create risk. A radio station app might start as a small “Now Playing” page and then grow into admin controls—so you want to design security correctly from day one.
Use HTTPS everywhere (API + player links)
Always call the API over HTTPS and prefer SSL stream URLs in your apps. This protects credentials, listener privacy, and avoids mixed-content errors in browsers. Shoutcast Net supports SSL streaming, so your station can look professional and function reliably in modern browsers and embedded players.
Prefer tokens over embedding passwords
If your panel provides an API token, use it. Tokens are easier to rotate than passwords and can be limited in scope depending on the system. Never ship tokens inside a public mobile app bundle or a JavaScript frontend—treat them like cash.
Implement an API proxy (backend-for-frontend)
Your custom app should have a small backend endpoint like /api/now-playing that:
- • Verifies the user session (if needed)
- • Calls Shoutcast Net API with your secret token
- • Caches responses for a few seconds to reduce load
- • Returns only what the frontend needs
Use IP allowlists for admin actions
For actions like metadata updates or stream control, restrict calls to known IPs (your office/studio, your automation server, your CI/CD runner). That way even if a token is exposed, the attacker can’t use it from the outside.
Example: secure request pattern (server-side)
// Example: Node.js server-side fetch wrapper
async function scnetRequest(path, { method = "GET", body } = {}) {
const url = new URL(path, process.env.SCNET_BASE_URL);
const res = await fetch(url.toString(), {
method,
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
// Example auth header pattern; use the exact scheme your Shoutcast Net panel provides
"Authorization": `Bearer ${process.env.SCNET_API_TOKEN}`,
},
body: body ? JSON.stringify(body) : undefined,
});
if (!res.ok) {
const text = await res.text().catch(() => "");
throw new Error(`Shoutcast Net API error ${res.status}: ${text}`);
}
return res.json();
}
Shoutcast Net vs Wowza billing and operational risk
Operationally, you don’t want your app’s success to become a cost problem. Wowza’s expensive per-hour/per-viewer billing can turn a viral moment, a big sports match, or a holiday service into a budget surprise. Shoutcast Net’s flat-rate unlimited model is simpler to plan around—especially for schools, churches, and recurring live events.
Pro Tip
Add a “credential rotation” note to your runbook. Schedule token rotation quarterly, and make sure your API proxy reads tokens from environment variables so rotating doesn’t require code changes.
Step 4–6: Read Now Playing, listeners, and stream status
Now we’ll implement the most common use cases for DJs and broadcasters: displaying Now Playing, showing listener totals, and detecting whether the stream is online. These features power everything from website widgets to in-studio dashboards to “Now Playing” overlays in OBS.
Step 4: Read “Now Playing” for your website/app
Your goal: return a simple JSON payload your frontend can display—track title, artist, and timestamp. Exact endpoint paths vary by service configuration, so check your Shoutcast Net panel/API docs for the canonical routes. Your implementation pattern is consistent:
- • Call the API “now playing” endpoint on the server side
- • Normalize the response to your app’s schema
- • Cache for 3–10 seconds (metadata doesn’t need millisecond updates)
// Example: your app endpoint handler (pseudo-code)
export async function getNowPlaying() {
const data = await scnetRequest(`/v1/stations/${process.env.SCNET_STATION_ID}/now-playing`);
return {
title: data?.track?.title ?? "",
artist: data?.track?.artist ?? "",
startedAt: data?.track?.startedAt ?? null,
artworkUrl: data?.track?.artworkUrl ?? null,
};
}
Step 5: Read listeners (current, peak, uniques)
Listener stats are useful for:
- • DJ dashboards (motivation + timing)
- • Sponsor reports
- • Church attendance analytics for online services
- • School stations proving engagement to administrators
// Example: listener stats request (pseudo-code)
export async function getListenerStats() {
const data = await scnetRequest(`/v1/stations/${process.env.SCNET_STATION_ID}/listeners`);
return {
current: data?.current ?? 0,
peak: data?.peak ?? 0,
unique: data?.unique ?? 0,
};
}
Step 6: Monitor stream status (online/offline, bitrate, health)
A stream status endpoint is the backbone of alerting and automation. For example, if your live encoder crashes during a concert, you can automatically fail over to AutoDJ or display a message in your app.
// Example: stream status request (pseudo-code)
export async function getStreamStatus() {
const data = await scnetRequest(`/v1/stations/${process.env.SCNET_STATION_ID}/status`);
return {
online: Boolean(data?.online),
bitrateKbps: data?.bitrateKbps ?? null,
codec: data?.codec ?? null,
listeners: data?.listeners ?? 0,
};
}
Comparison: Shoutcast Net flat-rate vs Wowza variable billing
If your custom app makes listening easier, your audience grows—and billing models matter. Here’s why many broadcasters prefer Shoutcast Net for predictable costs:
| Feature | Shoutcast Net | Wowza (common perception) |
|---|---|---|
| Pricing model | Flat-rate unlimited model (great for spikes) | Often expensive per-hour/per-viewer billing |
| Entry cost | $4/month starting price + 7 days trial | Higher and can scale with usage |
| Listeners | Unlimited listeners | Costs may increase with audience |
| Station ops | 99.9% uptime, SSL streaming, broadcaster-first tooling | Powerful, but can be overkill and costly for radio-style use |
| Legacy limitations | Designed to move beyond legacy Shoutcast pain points | Not a Shoutcast replacement; different operational model |
Pro Tip
Cache Now Playing and listener stats separately. Now Playing can be cached for ~5–10 seconds, while status checks might run every 10–30 seconds. This keeps your app responsive without hammering your API.
Step 7–8: Update metadata and control your stream
Once your app can read data, the next level is writing data—especially metadata. DJs love “Now Playing” that updates correctly, and listeners trust stations that show accurate titles (and podcast episode names) across players and smart devices.
Step 7: Update metadata safely (DJ tools, live events, sermons)
Metadata updates typically include title/artist (music), episode title (podcast-style live), or segment title (church service agenda). Do these updates from a trusted server or an authenticated staff panel—not from a public client.
// Example: metadata update (pseudo-code)
export async function updateMetadata({ title, artist }) {
// Validate inputs (length limits, profanity filters, etc.)
const body = { title, artist };
// Endpoint path is illustrative; use the exact route in your Shoutcast Net API docs/panel.
const data = await scnetRequest(`/v1/stations/${process.env.SCNET_STATION_ID}/metadata`, {
method: "POST",
body,
});
return { ok: true, result: data };
}
Security note: if you let DJs update metadata from a web UI, protect it with login + role permissions. For school stations, consider restricting updates to on-campus IPs with an allowlist.
Step 8: Implement basic stream controls (with guardrails)
Depending on your plan and configuration, you may have API actions to start/stop automation, switch sources, or trigger a reconnect workflow. Keep controls minimal, logged, and permissioned—especially for churches and schools where volunteers rotate.
// Example: guarded control action (pseudo-code)
export async function switchToAutoDj() {
// Only allow from admin role + allowlisted IPs
const data = await scnetRequest(`/v1/stations/${process.env.SCNET_STATION_ID}/source/switch`, {
method: "POST",
body: { target: "autodj" },
});
return { ok: true, result: data };
}
When to use AutoDJ vs live encoder
AutoDJ is ideal for 24/7 playback, overnight scheduling, and “failover” when a live encoder disconnects. A live encoder is best for talk shows, sports, concerts, and real-time sermons—especially when you’re targeting very low latency 3 sec interactions in companion apps.
If you need a modern distribution setup (for example, sending your live show to multiple platforms), Shoutcast Net helps you keep audio streaming stable while you Restream to Facebook, Twitch, YouTube in parallel.
Pro Tip
Log every metadata/control call with timestamp, user, and IP. When a title changes unexpectedly (or automation flips mid-show), you’ll have an audit trail and can fix process issues fast.
Step 9–10: Automate with AutoDJ, scheduling, and alerts
The biggest payoff from an API integration is automation: scheduled programming, automatic fallbacks, and proactive alerts when something breaks. This is where Shoutcast Net is especially broadcaster-friendly—without forcing you into Wowza’s expensive per-hour/per-viewer billing for routine station operations.
Step 9: Schedule programming with AutoDJ
If your station runs 24/7, AutoDJ can handle playlists, rotations, and scheduled shows. Your custom app can become a “program director” interface: upload content, schedule blocks, and display what’s queued next.
A practical scheduling pattern:
- • Maintain a schedule in your app (show name, start/end, playlist ID)
- • Sync changes to Shoutcast Net via the API (create/update schedule entries)
- • Use Now Playing + queue endpoints to show “Up Next”
- • Add a manual override button for staff (switch to live source)
// Example: create schedule entry (pseudo-code)
export async function createScheduleEntry(entry) {
// entry: { name, startTime, endTime, playlistId, timezone }
const data = await scnetRequest(`/v1/stations/${process.env.SCNET_STATION_ID}/autodj/schedule`, {
method: "POST",
body: entry,
});
return { ok: true, result: data };
}
Step 10: Add alerts (downtime, silence, metadata stuck)
Build alerts around the stream status checks you created earlier. Common broadcaster alerts include:
- • Stream goes offline (encoder crash, network issue)
- • Listener count drops suddenly (possible outage)
- • Metadata hasn’t changed for X minutes (automation stuck)
- • Bitrate/codec mismatch (misconfigured encoder preset)
A simple approach is a cron job (or serverless scheduler) that polls status every 30–60 seconds and notifies via email/SMS/Discord when thresholds are crossed:
// Example: alert loop (pseudo-code)
export async function healthCheckAndAlert(notify) {
const status = await getStreamStatus();
if (!status.online) {
await notify("Stream offline: switching to AutoDJ or investigating encoder.");
// Optional: trigger a failover action
// await switchToAutoDj();
}
if (status.bitrateKbps !== null && status.bitrateKbps < 64) {
await notify(`Low bitrate detected (${status.bitrateKbps} kbps). Check encoder settings.`);
}
}
Why this automation matters for churches, schools, and events
Volunteer teams rotate. Student staff changes every semester. Live events have unpredictable connectivity. Automation plus clear alerts means your stream stays reliable—supporting 99.9% uptime goals and keeping your audience engaged whether they listen on mobile, desktop, smart speakers, or embedded players.
And because Shoutcast Net is designed for unlimited listeners on a predictable plan, you can promote your stream without worrying about audience spikes turning into a billing emergency (a common fear under Wowza’s expensive per-hour/per-viewer billing).
Next steps: launch, test, and scale
- • Test with real devices and networks (Wi-Fi + cellular)
- • Verify SSL URLs in all players
- • Confirm your app can stream from any device to any device in your target environments
- • Document your failover plan (live encoder → AutoDJ)
- • If you’re ready, pick a plan from the shop or start a 7 days trial
Pro Tip
Add a “status badge” to every internal tool: Online/Offline, SSL active, last metadata update, and last successful API call time. When something breaks five minutes before a big show, your team will instantly know where to look.
Ready to build?
Start streaming with Shoutcast Net and connect your custom app to real station data. Get predictable costs with the flat-rate unlimited model, plus the tools broadcasters need.