API de metadata hospedada para rádios web do mundo inteiro, com consumo via endpoint público e documentação voltada para integração rápida em players, painéis e aplicações.
- Endpoint hospedado:
https://api.twj.es - Suporte a streams Icecast, Shoutcast, Zeno.FM e outras rádios web
- Retorna metadados em tempo real, capa, histórico e contexto visual
search.phpdisponível para busca de capa, álbum e correspondência de faixas
curl "https://api.twj.es/?url=https://stream.zeno.fm/yn65fsaurfhvv"Retorna o estado atual da reprodução, com dados da faixa em execução.
curl "https://api.twj.es/search.php?query=Ministério%20Vineyard%20-%20Tu%20És%20Bom"Use o parâmetro query com artista e título. A resposta traz:
results— melhor correspondência encontradaother_matches— alternativas relevantes ordenadas por similaridade
Os campos artwork e stream_url são URLs diretas, não markdown.
"artwork": "https://i.scdn.co/image/ab67616d0000b273f7180d5f9061ef30de929f7e",
"stream_url": "https://open.spotify.com/track/05FaR9FTuCSEpiPqU6f1A2"{
"songtitle": "Fernandinho - Nada Além do Sangue",
"artist": "Fernandinho",
"song": "Nada Além do Sangue",
"album": "Uma Nova História",
"year": "2009",
"albumArt": "https://.../600x600bb.jpg",
"streamUrl": "https://music.apple.com/...",
"youtubeId": "csPaNdL6ndA",
"now_playing": {
"elapsed": 124,
"remaining": 137,
"duration": 261
},
"song_history": [
{ "song": { "title": "Atos 2 (Ao Vivo)", "artist": "Gabriela Rocha", "youtubeId": "WWrU6LC_4ho" } }
]
}- Primeira consulta de uma rádio retorna
"Carregando..."com"loading": true— é um estado, não uma música (não busque capa/letra dele); continue o polling e os dados reais chegam em segundos. - Enriquecimento assíncrono: o nome cru da música é publicado na hora;
albumArteyoutubeIdpodem aparecer um ou dois polls depois. Para detectar atualizações, compare osongtitlee os campos de enriquecimento. - O ICY é lei:
artist/songsão sempre o que a rádio transmitiu. O enriquecimento adiciona capa, álbum, ano, duração e links — nunca renomeia a faixa. - Cache e ETag: respostas têm cache compartilhado de 5s e suportam
If-None-Match(304gratuito). Faça polling a cada 10 segundos por ouvinte. - Modo clipe: use o
youtubeIdpara exibir o clipe da música enow_playing.elapsedpara abri-lo sincronizado (&start={elapsed}no embed). Cada item dosong_historytambém traz seuyoutubeId— histórico clicável. - Rádios sem ouvintes por 5 minutos deixam de ser monitoradas e voltam automaticamente na próxima consulta.
const streamUrl = 'https://stream.zeno.fm/yn65fsaurfhvv';
const response = await fetch(`https://api.twj.es/?url=${encodeURIComponent(streamUrl)}`);
const payload = await response.json();
console.log(payload);curl "https://api.twj.es/?url=https://stream.zeno.fm/yn65fsaurfhvv"Painel público:
Use-o para verificar o estado do serviço, testar endpoints e acompanhar métricas de operação.
Hosted metadata API for web radios worldwide, accessible via a public endpoint and documented for fast integration in players, dashboards and applications.
- Hosted endpoint:
https://api.twj.es - Supports Icecast, Shoutcast, Zeno.FM and other web radio streams
- Returns real-time metadata, cover art, history, and visual context
search.phpavailable for cover art, album and track context search
curl "https://api.twj.es/?url=https://stream.zeno.fm/yn65fsaurfhvv"Returns the current playback state with the playing track information.
curl "https://api.twj.es/search.php?query=Ministério%20Vineyard%20-%20Tu%20És%20Bom"Use the query parameter with artist and title. The response includes:
results— best match foundother_matches— relevant alternatives ordered by similarity
Fields like artwork and stream_url are direct URLs, not markdown.
{
"songtitle": "Fernandinho - Nada Além do Sangue",
"artist": "Fernandinho",
"song": "Nada Além do Sangue",
"album": "Uma Nova História",
"year": "2009",
"albumArt": "https://.../600x600bb.jpg",
"streamUrl": "https://music.apple.com/...",
"youtubeId": "csPaNdL6ndA",
"now_playing": {
"elapsed": 124,
"remaining": 137,
"duration": 261
},
"song_history": [
{ "song": { "title": "Atos 2 (Ao Vivo)", "artist": "Gabriela Rocha", "youtubeId": "WWrU6LC_4ho" } }
]
}- First request for a radio returns
"Carregando..."with"loading": true— it is a state, not a song (do not look up cover/lyrics for it); keep polling and real data arrives within seconds. - Asynchronous enrichment: the raw song name is published instantly;
albumArtandyoutubeIdmay appear one or two polls later. To detect updates, comparesongtitleand the enrichment fields. - ICY is law:
artist/songare always what the radio broadcast. Enrichment adds cover, album, year, duration and links — it never renames the track. - Cache and ETag: responses have a 5s shared cache and support
If-None-Match(a free304). Poll every 10 seconds per listener. - Clip mode: use
youtubeIdto show the music video andnow_playing.elapsedto open it synchronized (&start={elapsed}on the embed). Eachsong_historyitem also carries its ownyoutubeId— clickable history. - Radios with no listeners for 5 minutes stop being monitored and resume automatically on the next request.
const streamUrl = 'https://stream.zeno.fm/yn65fsaurfhvv';
const response = await fetch(`https://api.twj.es/?url=${encodeURIComponent(streamUrl)}`);
const payload = await response.json();
console.log(payload);curl "https://api.twj.es/?url=https://stream.zeno.fm/yn65fsaurfhvv"Public dashboard:
Use it to verify service status, test endpoints and monitor operation metrics.
API de metadatos alojada para radios web de todo el mundo, accesible mediante un endpoint público y documentada para integración rápida en reproductores, paneles y aplicaciones.
- Endpoint alojado:
https://api.twj.es - Compatible con streams Icecast, Shoutcast, Zeno.FM y otras radios web
- Devuelve metadatos en tiempo real, portada, historial y contexto visual
search.phpdisponible para buscar portada, álbum y contexto de canciones
curl "https://api.twj.es/?url=https://stream.zeno.fm/yn65fsaurfhvv"Devuelve el estado actual de reproducción con la información de la pista en reproducción.
curl "https://api.twj.es/search.php?query=Ministério%20Vineyard%20-%20Tu%20És%20Bom"Usa el parámetro query con artista y título. La respuesta incluye:
results— mejor coincidencia encontradaother_matches— alternativas relevantes ordenadas por similitud
Campos como artwork y stream_url son URLs directas, no markdown.
{
"songtitle": "Fernandinho - Nada Além do Sangue",
"artist": "Fernandinho",
"song": "Nada Além do Sangue",
"album": "Uma Nova História",
"year": "2009",
"albumArt": "https://.../600x600bb.jpg",
"streamUrl": "https://music.apple.com/...",
"youtubeId": "csPaNdL6ndA",
"now_playing": {
"elapsed": 124,
"remaining": 137,
"duration": 261
},
"song_history": [
{ "song": { "title": "Atos 2 (Ao Vivo)", "artist": "Gabriela Rocha", "youtubeId": "WWrU6LC_4ho" } }
]
}- La primera consulta de una radio devuelve
"Carregando..."con"loading": true— es un estado, no una canción (no busques portada/letra de él); sigue consultando y los datos reales llegan en segundos. - Enriquecimiento asíncrono: el nombre crudo de la canción se publica al instante;
albumArtyyoutubeIdpueden aparecer uno o dos sondeos después. Para detectar actualizaciones, comparasongtitley los campos de enriquecimiento. - El ICY es ley:
artist/songson siempre lo que la radio transmitió. El enriquecimiento añade portada, álbum, año, duración y enlaces — nunca renombra la pista. - Caché y ETag: las respuestas tienen caché compartida de 5s y soportan
If-None-Match(304gratuito). Consulta cada 10 segundos por oyente. - Modo clip: usa
youtubeIdpara mostrar el vídeo musical ynow_playing.elapsedpara abrirlo sincronizado (&start={elapsed}en el embed). Cada elemento desong_historytambién trae suyoutubeId— historial clicable. - Las radios sin oyentes durante 5 minutos dejan de monitorearse y vuelven automáticamente en la siguiente consulta.
const streamUrl = 'https://stream.zeno.fm/yn65fsaurfhvv';
const response = await fetch(`https://api.twj.es/?url=${encodeURIComponent(streamUrl)}`);
const payload = await response.json();
console.log(payload);curl "https://api.twj.es/?url=https://stream.zeno.fm/yn65fsaurfhvv"Panel público:
Úsalo para verificar el estado del servicio, probar endpoints y seguir métricas de operación.
A landing page oficial está em português, inglês e espanhol:
| Player | Estilo / Style |
|---|---|
| RadioPlayer | Player de página cheia com modo clipe e histórico clicável |
| Radioplayer_api | Multi-estação com 3 layouts prontos |
| bottom_radioplayer | Componente de rodapé — o áudio não para ao navegar |
| RadioPlayer-ZenoRadio | Player de página cheia para streams Zeno.FM |
Este repositório não publica a implementação executável da API. Ele documenta apenas o serviço hospedado e os endpoints públicos para consumo.
now playing api, api para radio, metadata api, radio web, icecast, shoutcast, zeno.fm, api de música em tempo real, busca de capa, endpoint de metadados