Ting ting plays one podcast episode at a time and remembers where you stopped in every episode you open. It has no search, no subscriptions and no account: episodes arrive by link, mostly from Glimpt. Everything it remembers stays in this browser.
Open an episode from your own site or app
Anything that can make a link can send an episode here. Point it at
https://ting-ting.statichost.page/
with the episode in the query string, in one of three ways. Encode each value as you would any URL parameter (URLSearchParams or encodeURIComponent does it).
1. With the audio file recommended
?audio=https%3A%2F%2Fexample.com%2Fepisode.mp3&title=…&show=…&art=…&date=2026-10-01&link=…&id=…&show-id=…
Nothing is looked up, so it opens at once. Only audio is required; the rest make it look and behave right.
audio- The episode’s audio file (http or https). Required.
title- The episode’s title.
show- The show’s name.
art- Artwork URL, square; 600px is plenty.
date- Release date,
YYYY-MM-DD.
link- The episode’s web page, offered as “Episode page” if the audio will not play.
id- Apple Podcasts episode id (
trackId). Strongly suggested: the saved position is kept under it, so it survives the show moving its audio file.
show-id- Apple Podcasts show id (
collectionId). With id, it brings the show notes.
dur- Duration in seconds, shown before the audio has loaded.
2. With Apple Podcasts ids only
?id=1000789467893&show-id=1050462261
Ting ting asks Apple’s podcast index for the rest. Apple lists a show’s newest 200 episodes, so an older one cannot be found this way: send the audio instead. Try this one.
3. With a link
?url=https%3A%2F%2Fpodcasts.apple.com%2Fus%2Fpodcast%2Facquired%2Fid1050462261%3Fi%3D1000789467893
An Apple Podcasts episode link (the kind with ?i= in it) is looked up as above; a link straight to an audio file plays as it is. This is also what Android’s Share menu sends to the installed app.
From Apple’s podcast API
If your episodes come from Apple’s Search or Lookup API (entity=podcastEpisode), every field is already there:
const u = new URL('https://ting-ting.statichost.page/');
u.search = new URLSearchParams({
audio: ep.episodeUrl,
title: ep.trackName,
show: ep.collectionName,
art: ep.artworkUrl600,
date: ep.releaseDate.slice(0, 10),
link: ep.trackViewUrl,
id: ep.trackId,
'show-id': ep.collectionId,
dur: Math.round(ep.trackTimeMillis / 1000)
});
What happens then
- The episode opens and tries to play. Most browsers want a tap first, and then the play button waits.
- An episode opened before comes back where it was left, unless it was finished.
- The query is cleared from the address bar once read, so a reload does not reopen it.
- Downloading for offline is offered only when the audio’s server lets other sites read the file (CORS).