Since "xc api" is a bit ambiguous (it could refer to a specific coding framework, a typo for "Xcode," or a generic placeholder for a tech stack), I have written a flexible, technical blog post.
This post assumes you are creating a backend feature that generates a shareable link for a playlist (like a music or video queue) via an API.
If your playlist link returns a 403, 404, or empty page, use this checklist.
XC API playlist links are central to sharing and integrating curated media collections. Secure handling of tokens, clear API design, and caching/pagination are key for scalable and safe implementations. xc api playlist link
Related search terms request invoked.
This is the "xc api playlist link" in action for the end user. The friend clicks the link myapp.com/playlist/xc_4j9s2. The frontend hits the API to fetch the songs.
GET /api/v1/playlists/share/share_token
Crucial Distinction: This endpoint must not require authentication. It is a public route. It should return the playlist title, track list, and metadata, but it should strip out sensitive user data (like the owner's email address).
The industry standard for XC API calls follows a simple RESTful structure. Note that there are two primary formats: standard M3U (for players like VLC) and JSON (for custom app development).
&type parameter. If your subscription has expired, the API returns a blank list. Use the player_api.php endpoint to check "exp_date".app.get('/api/playlist/:linkId.:format', async (req, res) => try const linkId, format = req.params;const linkData = await PlaylistLink.findOne( linkId ); if (!linkData) return res.status(404).send('Playlist link not found'); // Check expiration if (linkData.expiresAt && new Date() > linkData.expiresAt) return res.status(410).send('Playlist link expired'); // Update stats linkData.lastAccessed = new Date(); linkData.accessCount += 1; await linkData.save(); // Fetch live streams + VOD from XC API const baseUrl = `http://$linkData.xcServer:$linkData.xcPort`; const apiBase = `$baseUrl/player_api.php?username=$linkData.xcUsername&password=$linkData.xcPassword`; // Get live categories & streams const liveCategories = await axios.get(`$apiBase&action=get_live_categories`); const liveStreams = await axios.get(`$apiBase&action=get_live_streams`); // Get VOD const vodCategories = await axios.get(`$apiBase&action=get_vod_categories`); const vodStreams = await axios.get(`$apiBase&action=get_vod_streams`); // Generate M3U let m3u = '#EXTM3U\n'; // Live TV section liveStreams.data.forEach(stream => 'General'; m3u += `#EXTINF:-1 tvg-id="$stream.stream_id" tvg-name="$stream.name" tvg-logo="$stream.stream_icon" group-title="$category", $stream.name\n`; m3u += `$streamUrl\n`; ); // VOD section vodStreams.data.forEach(vod => const vodUrl = `$baseUrl/movie/$linkData.xcUsername/$linkData.xcPassword/$vod.stream_id.mp4`; m3u += `#EXTINF:-1 tvg-id="$vod.stream_id" tvg-name="$vod.name" tvg-logo="$vod.stream_icon" group-title="VOD", $vod.name\n`; m3u += `$vodUrl\n`; ); res.setHeader('Content-Type', 'audio/x-mpegurl'); res.setHeader('Content-Disposition', `inline; filename="playlist.$format"`); res.send(m3u);
catch (err) console.error(err); res.status(500).send('Error generating playlist'); );Since "xc api" is a bit ambiguous (it
Sometimes, you don't need the whole playlist; you just need the direct streaming URL for a specific channel. The XC API allows you to generate a stream link on the fly:
http://SERVER_URL:PORT/YOUR_USER/YOUR_PASS/CHANNEL_ID
Example:
http://myiptv.net:8080/john123/pass456/152.ts