Introduction
Public REST API (v1) for managing podcast feeds, episodes and media files.
This is the reference documentation for v1 of the podcaster public API.
<aside>All endpoints require an OAuth access token or Personal Access Token
issued by Passport. Pass it as a <code>Bearer</code> token in the
<code>Authorization</code> header. Each endpoint lists the scope it requires.</aside>
Authenticating requests
To authenticate requests, include an Authorization header with the value "Bearer {YOUR_ACCESS_TOKEN}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
Authentication uses Laravel Passport. You can obtain a token by:
<ul>
<li>Creating a <b>Personal Access Token</b> in your account settings.</li>
<li>Performing the OAuth Authorization Code flow against <code>/oauth/authorize</code>.</li>
</ul>
Tokens are scoped — each endpoint declares which scope it requires (e.g. <code>feeds</code>,
<code>media</code>, <code>shows</code>). Read-only variants (<code>*-read-only</code>) are also accepted
where appropriate.
Episodes
List episodes
requires authentication
Returns a list of episodes belonging to a podcast channel. Accessible with scopes: shows,shows-read-only
Example request:
curl --request GET \
--get "https://podcaster.rest/v1/shows?channel_id=123e4567-e89b-12d3-a456-426655440000&page[number]=22&page[size]=7&filter=Kurzfilm&sortBy=published_at&sortDesc=desc&page%5Bnumber%5D=1&page%5Bsize%5D=10" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://podcaster.rest/v1/shows"
);
const params = {
"channel_id": "123e4567-e89b-12d3-a456-426655440000",
"page[number]": "22",
"page[size]": "7",
"filter": "Kurzfilm",
"sortBy": "published_at",
"sortDesc": "desc",
"page[number]": "1",
"page[size]": "10",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/shows';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'channel_id' => '123e4567-e89b-12d3-a456-426655440000',
'page[number]' => '22',
'page[size]' => '7',
'filter' => 'Kurzfilm',
'sortBy' => 'published_at',
'sortDesc' => 'desc',
'page[number]' => '1',
'page[size]' => '10',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/shows'
params = {
'channel_id': '123e4567-e89b-12d3-a456-426655440000',
'page[number]': '22',
'page[size]': '7',
'filter': 'Kurzfilm',
'sortBy': 'published_at',
'sortDesc': 'desc',
'page[number]': '1',
'page[size]': '10',
}
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"data": [
{
"type": "show",
"id": "pod-5ea2082c6bc37297937508",
"feed_id": "Der_Podcast",
"links": {
"self": "https://api.podcaster.sattoaster/api/shows/pod-5ea2082c6bc37297937508?feedId=Der_Podcast",
"web": "https://beispiel.podcaster.de/der_podcast/beispiel-013/",
"logo": "",
"media": ""
},
"attributes": {
"title": "Beispiel #013",
"description": "Dies ist eine Beispiel-Episode für den Podcast-Hostingservice podcaster.de",
"author": "beispiel@kundendomain.me (Fabio Bacigalupo)",
"link": "https://beispiel.podcaster.de/der_podcast/beispiel-013/",
"copyright": "podcaster.de",
"logo": "",
"guid": "pod-5ea2082c6bc37297937508",
"publish_date": "1587677228",
"publish_date_formatted": "23.04.2020, 23:27 Uhr",
"status": "DRAFT",
"file": "",
"enclosure_url": "",
"itunes": {
"title": "Nur als Entwurf",
"subtitle": "",
"logo": "1587677200",
"summary": "",
"episodeType": "full",
"author": "Fabio Bacigalupo",
"duration": "00:05:08",
"season": "",
"episode": ""
},
"type": "unknown",
"duration_formatted": "5m 8s"
},
"relationships": [
"entry"
]
},
{
"type": "show",
"id": "pod-5cc21955598f7405476263",
"feed_id": "Der_Podcast",
"links": {
"self": "https://api.podcaster.sattoaster/api/shows/pod-5cc21955598f7405476263?feedId=Der_Podcast",
"web": "https://beispiel.podcaster.de/der_podcast/beispiel-folge-xyz-011/",
"logo": "",
"media": ""
},
"attributes": {
"title": "#012 Beispiel-Folge",
"description": "<div>Dies ist eine Beispiel-Episode für den Podcast-Hostingservice podcaster.de <br></div><div></div>\n\nIn der Folge wird erklärt, was ein Podcast ist.",
"author": "beispiel@kundendomain.me (Fabio Bacigalupo)",
"link": "https://beispiel.podcaster.de/der_podcast/beispiel-folge-xyz-011/",
"copyright": "podcaster.de",
"logo": "",
"guid": "pod-5cc21955598f7405476263",
"publish_date": "1557908895",
"publish_date_formatted": "15.05.2019, 10:28 Uhr",
"status": "PUBLISHED",
"file": "",
"enclosure_url": "",
"itunes": {
"title": "Beispiel-Folge xyz",
"subtitle": "xyz sagt alles",
"logo": "1555322159",
"summary": "",
"episodeType": "full",
"author": "Fabio Bacigalupo",
"duration": "00:05:08",
"season": "1",
"episode": "10"
},
"type": "unknown",
"duration_formatted": "5m 8s"
},
"relationships": [
"entry"
]
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get episode
requires authentication
Gets details of an episode. Accessible with scopes: shows,shows-read-only
Example request:
curl --request GET \
--get "https://podcaster.rest/v1/shows/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://podcaster.rest/v1/shows/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/shows/6ff8f7f6-1eb3-3525-be4a-3932c805afed';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/shows/6ff8f7f6-1eb3-3525-be4a-3932c805afed'
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"type": "show",
"id": "pod-5ea2082c6bc37297937508",
"feed_id": "Der_Podcast",
"attributes": {
"title": "Beispiel #013",
"subtitle": "",
"link": "https://beispiel.podcaster.de/der_podcast/beispiel-013/",
"description": "Dies ist eine Beispiel-Episode für den Podcast-Hostingservice podcaster.de",
"author": "beispiel@kundendomain.me (Fabio Bacigalupo)",
"email": "",
"copyright": "podcaster.de",
"itunes": {
"title": "Nur als Entwurf",
"subtitle": "",
"logo": "1587677200",
"summary": "",
"episodeType": "full",
"author": "Fabio Bacigalupo",
"duration": "00:05:08",
"season": "",
"episode": ""
}
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create episode
requires authentication
Adds a new episode. Accessible with scope: shows
Example request:
curl --request POST \
"https://podcaster.rest/v1/shows" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "channel_id=123e4567-e89b-12d3-a456-426655440000"\
--form "status=PUBLISHED"\
--form "title=Dies ist eine Episode."\
--form "description="\
--form "author=Maxima Musterfrau"\
--form "copyright=Podcast-Team MM"\
--form "link="\
--form "file_id=1554927456"\
--form "itunes[title]="\
--form "itunes[subtitle]="\
--form "itunes[summary]="\
--form "itunes[episode]=0"\
--form "itunes[episodeType]="\
--form "itunes[season]=0"\
--form "itunes[logo]=0c9304c2-841d-40e8-9e48-a265d4c8f79b"\
--form "itunes[explicit]="\
--form "itunes[block]="\
--form "itunes[author]="\
--form "publishing_date=2021-08-26"\
--form "publishing_time=12:10:59"\
--form "podcastindex[episode_node_value]=4326.41688"\
--form "podcastindex[episode_display]=m"\
--form "podcastindex[chapter_url]=https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt"\
--form "podcastindex[chapter_type]=w"\
--form "podcastindex[image_srcset]=architecto"\
--form "podcastindex[license_node_value]=n"\
--form "podcastindex[license_url]=http://crooks.biz/et-fugiat-sunt-nihil-accusantium"\
--form "podcastindex[location_node_value]=n"\
--form "podcastindex[location_geo_latitude]=4326.41688"\
--form "podcastindex[location_geo_longitude]=4326.41688"\
--form "podcastindex[location_osm]=m"\
--form "podcastindex[season_node_value]=16"\
--form "podcastindex[season_name]=n"\
--form "podcastindex[transcript]=0c9304c2-841d-40e8-9e48-a265d4c8f79b"\
--form "write_metadata=1"\
--form "media=@/tmp/phpal94ijo2108bc4fekvK" \
--form "cover=@/tmp/phpt0ffnmet05o00JuZBRt" \
--form "podcastindex[transcript_file]=@/tmp/php6umo1im0a8751HjhHHQ" const url = new URL(
"https://podcaster.rest/v1/shows"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('channel_id', '123e4567-e89b-12d3-a456-426655440000');
body.append('status', 'PUBLISHED');
body.append('title', 'Dies ist eine Episode.');
body.append('description', '');
body.append('author', 'Maxima Musterfrau');
body.append('copyright', 'Podcast-Team MM');
body.append('link', '');
body.append('file_id', '1554927456');
body.append('itunes[title]', '');
body.append('itunes[subtitle]', '');
body.append('itunes[summary]', '');
body.append('itunes[episode]', '0');
body.append('itunes[episodeType]', '');
body.append('itunes[season]', '0');
body.append('itunes[logo]', '0c9304c2-841d-40e8-9e48-a265d4c8f79b');
body.append('itunes[explicit]', '');
body.append('itunes[block]', '');
body.append('itunes[author]', '');
body.append('publishing_date', '2021-08-26');
body.append('publishing_time', '12:10:59');
body.append('podcastindex[episode_node_value]', '4326.41688');
body.append('podcastindex[episode_display]', 'm');
body.append('podcastindex[chapter_url]', 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt');
body.append('podcastindex[chapter_type]', 'w');
body.append('podcastindex[image_srcset]', 'architecto');
body.append('podcastindex[license_node_value]', 'n');
body.append('podcastindex[license_url]', 'http://crooks.biz/et-fugiat-sunt-nihil-accusantium');
body.append('podcastindex[location_node_value]', 'n');
body.append('podcastindex[location_geo_latitude]', '4326.41688');
body.append('podcastindex[location_geo_longitude]', '4326.41688');
body.append('podcastindex[location_osm]', 'm');
body.append('podcastindex[season_node_value]', '16');
body.append('podcastindex[season_name]', 'n');
body.append('podcastindex[transcript]', '0c9304c2-841d-40e8-9e48-a265d4c8f79b');
body.append('write_metadata', '1');
body.append('media', document.querySelector('input[name="media"]').files[0]);
body.append('cover', document.querySelector('input[name="cover"]').files[0]);
body.append('podcastindex[transcript_file]', document.querySelector('input[name="podcastindex[transcript_file]"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/shows';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'channel_id',
'contents' => '123e4567-e89b-12d3-a456-426655440000'
],
[
'name' => 'status',
'contents' => 'PUBLISHED'
],
[
'name' => 'title',
'contents' => 'Dies ist eine Episode.'
],
[
'name' => 'description',
'contents' => ''
],
[
'name' => 'author',
'contents' => 'Maxima Musterfrau'
],
[
'name' => 'copyright',
'contents' => 'Podcast-Team MM'
],
[
'name' => 'link',
'contents' => ''
],
[
'name' => 'file_id',
'contents' => '1554927456'
],
[
'name' => 'itunes[title]',
'contents' => ''
],
[
'name' => 'itunes[subtitle]',
'contents' => ''
],
[
'name' => 'itunes[summary]',
'contents' => ''
],
[
'name' => 'itunes[episode]',
'contents' => '0'
],
[
'name' => 'itunes[episodeType]',
'contents' => ''
],
[
'name' => 'itunes[season]',
'contents' => '0'
],
[
'name' => 'itunes[logo]',
'contents' => '0c9304c2-841d-40e8-9e48-a265d4c8f79b'
],
[
'name' => 'itunes[explicit]',
'contents' => ''
],
[
'name' => 'itunes[block]',
'contents' => ''
],
[
'name' => 'itunes[author]',
'contents' => ''
],
[
'name' => 'publishing_date',
'contents' => '2021-08-26'
],
[
'name' => 'publishing_time',
'contents' => '12:10:59'
],
[
'name' => 'podcastindex[episode_node_value]',
'contents' => '4326.41688'
],
[
'name' => 'podcastindex[episode_display]',
'contents' => 'm'
],
[
'name' => 'podcastindex[chapter_url]',
'contents' => 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt'
],
[
'name' => 'podcastindex[chapter_type]',
'contents' => 'w'
],
[
'name' => 'podcastindex[image_srcset]',
'contents' => 'architecto'
],
[
'name' => 'podcastindex[license_node_value]',
'contents' => 'n'
],
[
'name' => 'podcastindex[license_url]',
'contents' => 'http://crooks.biz/et-fugiat-sunt-nihil-accusantium'
],
[
'name' => 'podcastindex[location_node_value]',
'contents' => 'n'
],
[
'name' => 'podcastindex[location_geo_latitude]',
'contents' => '4326.41688'
],
[
'name' => 'podcastindex[location_geo_longitude]',
'contents' => '4326.41688'
],
[
'name' => 'podcastindex[location_osm]',
'contents' => 'm'
],
[
'name' => 'podcastindex[season_node_value]',
'contents' => '16'
],
[
'name' => 'podcastindex[season_name]',
'contents' => 'n'
],
[
'name' => 'podcastindex[transcript]',
'contents' => '0c9304c2-841d-40e8-9e48-a265d4c8f79b'
],
[
'name' => 'write_metadata',
'contents' => '1'
],
[
'name' => 'media',
'contents' => fopen('/tmp/phpal94ijo2108bc4fekvK', 'r')
],
[
'name' => 'cover',
'contents' => fopen('/tmp/phpt0ffnmet05o00JuZBRt', 'r')
],
[
'name' => 'podcastindex[transcript_file]',
'contents' => fopen('/tmp/php6umo1im0a8751HjhHHQ', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/shows'
files = {
'channel_id': (None, '123e4567-e89b-12d3-a456-426655440000'),
'status': (None, 'PUBLISHED'),
'title': (None, 'Dies ist eine Episode.'),
'description': (None, ''),
'author': (None, 'Maxima Musterfrau'),
'copyright': (None, 'Podcast-Team MM'),
'link': (None, ''),
'file_id': (None, '1554927456'),
'itunes[title]': (None, ''),
'itunes[subtitle]': (None, ''),
'itunes[summary]': (None, ''),
'itunes[episode]': (None, '0'),
'itunes[episodeType]': (None, ''),
'itunes[season]': (None, '0'),
'itunes[logo]': (None, '0c9304c2-841d-40e8-9e48-a265d4c8f79b'),
'itunes[explicit]': (None, ''),
'itunes[block]': (None, ''),
'itunes[author]': (None, ''),
'publishing_date': (None, '2021-08-26'),
'publishing_time': (None, '12:10:59'),
'podcastindex[episode_node_value]': (None, '4326.41688'),
'podcastindex[episode_display]': (None, 'm'),
'podcastindex[chapter_url]': (None, 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt'),
'podcastindex[chapter_type]': (None, 'w'),
'podcastindex[image_srcset]': (None, 'architecto'),
'podcastindex[license_node_value]': (None, 'n'),
'podcastindex[license_url]': (None, 'http://crooks.biz/et-fugiat-sunt-nihil-accusantium'),
'podcastindex[location_node_value]': (None, 'n'),
'podcastindex[location_geo_latitude]': (None, '4326.41688'),
'podcastindex[location_geo_longitude]': (None, '4326.41688'),
'podcastindex[location_osm]': (None, 'm'),
'podcastindex[season_node_value]': (None, '16'),
'podcastindex[season_name]': (None, 'n'),
'podcastindex[transcript]': (None, '0c9304c2-841d-40e8-9e48-a265d4c8f79b'),
'write_metadata': (None, '1'),
'media': open('/tmp/phpal94ijo2108bc4fekvK', 'rb'),
'cover': open('/tmp/phpt0ffnmet05o00JuZBRt', 'rb'),
'podcastindex[transcript_file]': open('/tmp/php6umo1im0a8751HjhHHQ', 'rb')}
payload = {
"channel_id": "123e4567-e89b-12d3-a456-426655440000",
"status": "PUBLISHED",
"title": "Dies ist eine Episode.",
"description": "",
"author": "Maxima Musterfrau",
"copyright": "Podcast-Team MM",
"link": "",
"file_id": "1554927456",
"itunes": {
"title": "",
"subtitle": "",
"summary": "",
"episode": 0,
"episodeType": "",
"season": 0,
"logo": "0c9304c2-841d-40e8-9e48-a265d4c8f79b",
"explicit": false,
"block": false,
"author": ""
},
"publishing_date": "2021-08-26",
"publishing_time": "12:10:59",
"podcastindex": {
"episode_node_value": 4326.41688,
"episode_display": "m",
"chapter_url": "https:\/\/www.gulgowski.com\/nihil-accusantium-harum-mollitia-modi-deserunt",
"chapter_type": "w",
"image_srcset": "architecto",
"license_node_value": "n",
"license_url": "http:\/\/crooks.biz\/et-fugiat-sunt-nihil-accusantium",
"location_node_value": "n",
"location_geo_latitude": 4326.41688,
"location_geo_longitude": 4326.41688,
"location_osm": "m",
"season_node_value": 16,
"season_name": "n",
"transcript": "0c9304c2-841d-40e8-9e48-a265d4c8f79b"
},
"write_metadata": true
}
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, files=files)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Update episode
requires authentication
Updates details of an episode. Only the fields that are sent are changed. Accessible with scope: shows
Example request:
curl --request PUT \
"https://podcaster.rest/v1/shows/0c9304c2-841d-40e8-9e48-a265d4c8f79b" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "status=PUBLISHED"\
--form "title=Dies ist eine Episode."\
--form "description=Shownotes zur Episode"\
--form "author=Maxima Musterfrau"\
--form "copyright=Podcast-Team MM"\
--form "link=https://beispiel.podcaster.de/folge-1"\
--form "file_id=1554927456"\
--form "audiotakes_guid=b"\
--form "itunes[episode]=1"\
--form "itunes[episodeType]=full"\
--form "itunes[season]=1"\
--form "itunes[logo]=0c9304c2-841d-40e8-9e48-a265d4c8f79b"\
--form "itunes[explicit]="\
--form "itunes[block]="\
--form "publishing_date=2026-10-20"\
--form "publishing_time=12:10:59"\
--form "podcastindex[episode_node_value]=4326.41688"\
--form "podcastindex[episode_display]=m"\
--form "podcastindex[chapter_url]=https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt"\
--form "podcastindex[chapter_type]=w"\
--form "podcastindex[image_srcset]=architecto"\
--form "podcastindex[license_node_value]=n"\
--form "podcastindex[license_url]=http://crooks.biz/et-fugiat-sunt-nihil-accusantium"\
--form "podcastindex[location_node_value]=n"\
--form "podcastindex[location_geo_latitude]=4326.41688"\
--form "podcastindex[location_geo_longitude]=4326.41688"\
--form "podcastindex[location_osm]=m"\
--form "podcastindex[season_node_value]=16"\
--form "podcastindex[season_name]=n"\
--form "podcastindex[transcript]=0c9304c2-841d-40e8-9e48-a265d4c8f79b"\
--form "write_metadata=1"\
--form "cover=@/tmp/phpbjvir40gos9l4vay8Ug" \
--form "podcastindex[transcript_file]=@/tmp/php9tmda5qomocjaZsyuG4" const url = new URL(
"https://podcaster.rest/v1/shows/0c9304c2-841d-40e8-9e48-a265d4c8f79b"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('status', 'PUBLISHED');
body.append('title', 'Dies ist eine Episode.');
body.append('description', 'Shownotes zur Episode');
body.append('author', 'Maxima Musterfrau');
body.append('copyright', 'Podcast-Team MM');
body.append('link', 'https://beispiel.podcaster.de/folge-1');
body.append('file_id', '1554927456');
body.append('audiotakes_guid', 'b');
body.append('itunes[episode]', '1');
body.append('itunes[episodeType]', 'full');
body.append('itunes[season]', '1');
body.append('itunes[logo]', '0c9304c2-841d-40e8-9e48-a265d4c8f79b');
body.append('itunes[explicit]', '');
body.append('itunes[block]', '');
body.append('publishing_date', '2026-10-20');
body.append('publishing_time', '12:10:59');
body.append('podcastindex[episode_node_value]', '4326.41688');
body.append('podcastindex[episode_display]', 'm');
body.append('podcastindex[chapter_url]', 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt');
body.append('podcastindex[chapter_type]', 'w');
body.append('podcastindex[image_srcset]', 'architecto');
body.append('podcastindex[license_node_value]', 'n');
body.append('podcastindex[license_url]', 'http://crooks.biz/et-fugiat-sunt-nihil-accusantium');
body.append('podcastindex[location_node_value]', 'n');
body.append('podcastindex[location_geo_latitude]', '4326.41688');
body.append('podcastindex[location_geo_longitude]', '4326.41688');
body.append('podcastindex[location_osm]', 'm');
body.append('podcastindex[season_node_value]', '16');
body.append('podcastindex[season_name]', 'n');
body.append('podcastindex[transcript]', '0c9304c2-841d-40e8-9e48-a265d4c8f79b');
body.append('write_metadata', '1');
body.append('cover', document.querySelector('input[name="cover"]').files[0]);
body.append('podcastindex[transcript_file]', document.querySelector('input[name="podcastindex[transcript_file]"]').files[0]);
fetch(url, {
method: "PUT",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/shows/0c9304c2-841d-40e8-9e48-a265d4c8f79b';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'status',
'contents' => 'PUBLISHED'
],
[
'name' => 'title',
'contents' => 'Dies ist eine Episode.'
],
[
'name' => 'description',
'contents' => 'Shownotes zur Episode'
],
[
'name' => 'author',
'contents' => 'Maxima Musterfrau'
],
[
'name' => 'copyright',
'contents' => 'Podcast-Team MM'
],
[
'name' => 'link',
'contents' => 'https://beispiel.podcaster.de/folge-1'
],
[
'name' => 'file_id',
'contents' => '1554927456'
],
[
'name' => 'audiotakes_guid',
'contents' => 'b'
],
[
'name' => 'itunes[episode]',
'contents' => '1'
],
[
'name' => 'itunes[episodeType]',
'contents' => 'full'
],
[
'name' => 'itunes[season]',
'contents' => '1'
],
[
'name' => 'itunes[logo]',
'contents' => '0c9304c2-841d-40e8-9e48-a265d4c8f79b'
],
[
'name' => 'itunes[explicit]',
'contents' => ''
],
[
'name' => 'itunes[block]',
'contents' => ''
],
[
'name' => 'publishing_date',
'contents' => '2026-10-20'
],
[
'name' => 'publishing_time',
'contents' => '12:10:59'
],
[
'name' => 'podcastindex[episode_node_value]',
'contents' => '4326.41688'
],
[
'name' => 'podcastindex[episode_display]',
'contents' => 'm'
],
[
'name' => 'podcastindex[chapter_url]',
'contents' => 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt'
],
[
'name' => 'podcastindex[chapter_type]',
'contents' => 'w'
],
[
'name' => 'podcastindex[image_srcset]',
'contents' => 'architecto'
],
[
'name' => 'podcastindex[license_node_value]',
'contents' => 'n'
],
[
'name' => 'podcastindex[license_url]',
'contents' => 'http://crooks.biz/et-fugiat-sunt-nihil-accusantium'
],
[
'name' => 'podcastindex[location_node_value]',
'contents' => 'n'
],
[
'name' => 'podcastindex[location_geo_latitude]',
'contents' => '4326.41688'
],
[
'name' => 'podcastindex[location_geo_longitude]',
'contents' => '4326.41688'
],
[
'name' => 'podcastindex[location_osm]',
'contents' => 'm'
],
[
'name' => 'podcastindex[season_node_value]',
'contents' => '16'
],
[
'name' => 'podcastindex[season_name]',
'contents' => 'n'
],
[
'name' => 'podcastindex[transcript]',
'contents' => '0c9304c2-841d-40e8-9e48-a265d4c8f79b'
],
[
'name' => 'write_metadata',
'contents' => '1'
],
[
'name' => 'cover',
'contents' => fopen('/tmp/phpbjvir40gos9l4vay8Ug', 'r')
],
[
'name' => 'podcastindex[transcript_file]',
'contents' => fopen('/tmp/php9tmda5qomocjaZsyuG4', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/shows/0c9304c2-841d-40e8-9e48-a265d4c8f79b'
files = {
'status': (None, 'PUBLISHED'),
'title': (None, 'Dies ist eine Episode.'),
'description': (None, 'Shownotes zur Episode'),
'author': (None, 'Maxima Musterfrau'),
'copyright': (None, 'Podcast-Team MM'),
'link': (None, 'https://beispiel.podcaster.de/folge-1'),
'file_id': (None, '1554927456'),
'audiotakes_guid': (None, 'b'),
'itunes[episode]': (None, '1'),
'itunes[episodeType]': (None, 'full'),
'itunes[season]': (None, '1'),
'itunes[logo]': (None, '0c9304c2-841d-40e8-9e48-a265d4c8f79b'),
'itunes[explicit]': (None, ''),
'itunes[block]': (None, ''),
'publishing_date': (None, '2026-10-20'),
'publishing_time': (None, '12:10:59'),
'podcastindex[episode_node_value]': (None, '4326.41688'),
'podcastindex[episode_display]': (None, 'm'),
'podcastindex[chapter_url]': (None, 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt'),
'podcastindex[chapter_type]': (None, 'w'),
'podcastindex[image_srcset]': (None, 'architecto'),
'podcastindex[license_node_value]': (None, 'n'),
'podcastindex[license_url]': (None, 'http://crooks.biz/et-fugiat-sunt-nihil-accusantium'),
'podcastindex[location_node_value]': (None, 'n'),
'podcastindex[location_geo_latitude]': (None, '4326.41688'),
'podcastindex[location_geo_longitude]': (None, '4326.41688'),
'podcastindex[location_osm]': (None, 'm'),
'podcastindex[season_node_value]': (None, '16'),
'podcastindex[season_name]': (None, 'n'),
'podcastindex[transcript]': (None, '0c9304c2-841d-40e8-9e48-a265d4c8f79b'),
'write_metadata': (None, '1'),
'cover': open('/tmp/phpbjvir40gos9l4vay8Ug', 'rb'),
'podcastindex[transcript_file]': open('/tmp/php9tmda5qomocjaZsyuG4', 'rb')}
payload = {
"status": "PUBLISHED",
"title": "Dies ist eine Episode.",
"description": "Shownotes zur Episode",
"author": "Maxima Musterfrau",
"copyright": "Podcast-Team MM",
"link": "https:\/\/beispiel.podcaster.de\/folge-1",
"file_id": "1554927456",
"audiotakes_guid": "b",
"itunes": {
"episode": 1,
"episodeType": "full",
"season": 1,
"logo": "0c9304c2-841d-40e8-9e48-a265d4c8f79b",
"explicit": false,
"block": false
},
"publishing_date": "2026-10-20",
"publishing_time": "12:10:59",
"podcastindex": {
"episode_node_value": 4326.41688,
"episode_display": "m",
"chapter_url": "https:\/\/www.gulgowski.com\/nihil-accusantium-harum-mollitia-modi-deserunt",
"chapter_type": "w",
"image_srcset": "architecto",
"license_node_value": "n",
"license_url": "http:\/\/crooks.biz\/et-fugiat-sunt-nihil-accusantium",
"location_node_value": "n",
"location_geo_latitude": 4326.41688,
"location_geo_longitude": 4326.41688,
"location_osm": "m",
"season_node_value": 16,
"season_name": "n",
"transcript": "0c9304c2-841d-40e8-9e48-a265d4c8f79b"
},
"write_metadata": true
}
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, files=files)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete episode
requires authentication
Removes an episode from a podcast channel. Accessible with scope: shows
Example request:
curl --request DELETE \
"https://podcaster.rest/v1/shows/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://podcaster.rest/v1/shows/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/shows/6ff8f7f6-1eb3-3525-be4a-3932c805afed';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/shows/6ff8f7f6-1eb3-3525-be4a-3932c805afed'
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Media
List files
requires authentication
Gets a list of the user´s uploaded (media) files. Accessible with scopes: media,media-read-only
Example request:
curl --request GET \
--get "https://podcaster.rest/v1/media?sort_by=name&sort_dir=desc&filter=%22kreativ%22&strict=1&page[number]=1&page[size]=10" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://podcaster.rest/v1/media"
);
const params = {
"sort_by": "name",
"sort_dir": "desc",
"filter": ""kreativ"",
"strict": "1",
"page[number]": "1",
"page[size]": "10",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/media';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'sort_by' => 'name',
'sort_dir' => 'desc',
'filter' => '"kreativ"',
'strict' => '1',
'page[number]' => '1',
'page[size]' => '10',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/media'
params = {
'sort_by': 'name',
'sort_dir': 'desc',
'filter': '"kreativ"',
'strict': '1',
'page[number]': '1',
'page[size]': '10',
}
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"items": {
"data": [
{
"type": "media",
"id": "0c9304c2-841d-40e8-9e48-a265d4c8f79b",
"links": {
"self": "https://files.pdcstrcdn.de/h/beispiel/i/1600240053/f/1400x1400.png",
"embed": "https://files.pdcstrcdn.de/h/beispiel/i/1600240053/f/1400x1400.png?v=1600240053"
},
"attributes": {
"name": "1400x1400.png",
"byte": 14644,
"created": "16.09.20 09:07",
"created_date": "16.09.20",
"created_time": "09:07",
"size": "14.3 KB",
"cat": null,
"extension": "png",
"mimetype": "image/png",
"type": "image"
}
},
{
"type": "media",
"id": "106ffd15-9619-457f-b35e-46d418afa34d",
"links": {
"self": "https://files.pdcstrcdn.de/h/beispiel/i/1593720040/f/3000x3000.png",
"embed": "https://files.pdcstrcdn.de/h/beispiel/i/1593720040/f/3000x3000.png?v=1593720040"
},
"attributes": {
"name": "3000x3000.png",
"byte": 93132,
"created": "02.07.20 22:00",
"created_date": "02.07.20",
"created_time": "22:00",
"size": "90.95 KB",
"cat": "logos",
"extension": "png",
"mimetype": "image/png",
"type": "image"
}
}
],
"count": 0
},
"labels": [],
"total": 7
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get file
requires authentication
Gets details for a media file.
Example request:
curl --request GET \
--get "https://podcaster.rest/v1/media/0c9304c2-841d-40e8-9e48-a265d4c8f79b" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://podcaster.rest/v1/media/0c9304c2-841d-40e8-9e48-a265d4c8f79b"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/media/0c9304c2-841d-40e8-9e48-a265d4c8f79b';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/media/0c9304c2-841d-40e8-9e48-a265d4c8f79b'
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"name": "1400x1400.png",
"byte": 14644,
"size": "14.3 KB",
"mime_type": "image/png",
"type": "image",
"url": "https://beispiel.podcaster.de/download/1400x1400.png",
"uuid": "0c9304c2-841d-40e8-9e48-a265d4c8f79b",
"extension": "png",
"created": "16.09.20 09:07",
"created_time": "09:07",
"created_date": "16.09.20",
"width": 1400,
"height": 1400,
"isLogo": true,
"usage": [
"Cover vom Podcast `Beispiel-Podcast`"
],
"intern": "https://www.podcaster.de/s/i/0c9304c2-841d-40e8-9e48-a265d4c8f79b/1400x1400.png"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Upload file
requires authentication
Stores a file in the media manager.
Example request:
curl --request POST \
"https://podcaster.rest/v1/media" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "media=@/tmp/phpd1fo2rft18oi8ExQkxl" const url = new URL(
"https://podcaster.rest/v1/media"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('media', document.querySelector('input[name="media"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/media';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'media',
'contents' => fopen('/tmp/phpd1fo2rft18oi8ExQkxl', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/media'
files = {
'media': open('/tmp/phpd1fo2rft18oi8ExQkxl', 'rb')}
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, files=files)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete file
requires authentication
Remove a file from the media manager.
Example request:
curl --request DELETE \
"https://podcaster.rest/v1/media/0c9304c2-841d-40e8-9e48-a265d4c8f79b" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://podcaster.rest/v1/media/0c9304c2-841d-40e8-9e48-a265d4c8f79b"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/media/0c9304c2-841d-40e8-9e48-a265d4c8f79b';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/media/0c9304c2-841d-40e8-9e48-a265d4c8f79b'
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Podcasts
List podcasts
requires authentication
Returns a list of podcasts. Accessible with scopes: feeds,feeds-read-only
Example request:
curl --request GET \
--get "https://podcaster.rest/v1/channels?page%5Bnumber%5D=1&page%5Bsize%5D=10" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://podcaster.rest/v1/channels"
);
const params = {
"page[number]": "1",
"page[size]": "10",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/channels';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page[number]' => '1',
'page[size]' => '10',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/channels'
params = {
'page[number]': '1',
'page[size]': '10',
}
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"data": [
{
"type": "channel",
"id": "d8d4c7af-9923-4957-a26c-257b50d03026",
"links": {
"self": "https://podcaster.rest/api/channels/d8d4c7af-9923-4957-a26c-257b50d03026",
"rss": "https://3c7nyt.podcaster.de/fyshbm9vMKOWBu2sJOY5.rss",
"web": "",
"logo": "https://podcaster.rest/images/help/cover_missing.svg?v=1"
},
"attributes": {
"rss": {
"title": "dignissimos",
"subtitle": "Necessitatibus.",
"description": "Quis eaque aut necessitatibus delectus aspernatur. Quis omnis omnis omnis eaque natus sit. Officia dolorem molestiae deleniti eos et ut non sed.",
"copyright": "Ut amet."
},
"logo": null,
"is_explicit": true,
"is_protected": null,
"imported": null,
"podcastindex": {
"guid": "eYtzzsI1HU1aGjupIx7A",
"medium": "id",
"podping": true,
"license": {
"identifier": "Qui qui beatae nisi.",
"url": "http://seidl.com/"
},
"locked": {
"value": "no",
"owner": "sauer.thilo@web.de"
},
"update_frequency": {
"description": "Täglich",
"complete": true,
"dtstart": "2026-10-22T12:53:34.000000Z",
"rrule": "FREQ=DAILY"
},
"chat": [],
"trailer": [],
"blocks": [],
"fundings": [],
"images": [],
"locations": [],
"persons": [],
"txts": [],
"social_interacts": [],
"remote_items": [],
"podrolls": [],
"publisher": [],
"live_items": [],
"values": []
}
},
"shows_count": 0
},
{
"type": "channel",
"id": "9010053c-b764-4afd-88cb-77959e0d5fe9",
"links": {
"self": "https://podcaster.rest/api/channels/9010053c-b764-4afd-88cb-77959e0d5fe9",
"rss": "https://caunrc.podcaster.de/xEl1ab6Ih1q5PuIhB3w4.rss",
"web": "",
"logo": "https://podcaster.rest/images/help/cover_missing.svg?v=1"
},
"attributes": {
"rss": {
"title": "quasi",
"subtitle": "Quidem quam.",
"description": "Delectus culpa qui quis aut sit similique. Expedita aspernatur laudantium et voluptatem delectus quis iusto. Et itaque dolores distinctio soluta.",
"copyright": "Voluptas."
},
"logo": null,
"is_explicit": true,
"is_protected": null,
"imported": null,
"podcastindex": {
"guid": "oG6L2v2JAwiZTdyIpa9z",
"medium": "voluptatem",
"podping": true,
"license": {
"identifier": "Aut autem autem.",
"url": "http://seiler.de/expedita-consequuntur-culpa-dolorem-veniam-qui-beatae-ut"
},
"locked": {
"value": "yes",
"owner": "pweise@posteo.de"
},
"update_frequency": {
"description": "Täglich",
"complete": false,
"dtstart": "2026-10-22T12:53:35.000000Z",
"rrule": "FREQ=DAILY"
},
"chat": [],
"trailer": [],
"blocks": [],
"fundings": [],
"images": [],
"locations": [],
"persons": [],
"txts": [],
"social_interacts": [],
"remote_items": [],
"podrolls": [],
"publisher": [],
"live_items": [],
"values": []
}
},
"shows_count": 0
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get podcast
requires authentication
Returns information about a podcast (feed). Accessible with scopes: feeds,feeds-read-only
Example request:
curl --request GET \
--get "https://podcaster.rest/v1/channels/a07d83fb-55db-47a0-80fa-fd3cc28d0327" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://podcaster.rest/v1/channels/a07d83fb-55db-47a0-80fa-fd3cc28d0327"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/channels/a07d83fb-55db-47a0-80fa-fd3cc28d0327';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/channels/a07d83fb-55db-47a0-80fa-fd3cc28d0327'
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"type": "channel",
"id": "666a9d44-32d5-471d-b4d4-feeeea5227a1",
"feed_id": "JZQyXkN7n7IPQRms5B28",
"attributes": {
"rss": {
"title": "aut",
"description": "Veniam corporis dolorem mollitia. Nemo odit quia officia est dignissimos. Blanditiis odio veritatis excepturi doloribus delectus fugit. Repudiandae laboriosam est alias tenetur ratione.",
"copyright": "Assumenda.",
"subtitle": "Suscipit doloribus.",
"link": "http://www.ott.com/rem-est-esse-sint-aut",
"author": "Julius Weiss-Jacobs",
"email": "klose.birgitta@hinz.net",
"language": "ie",
"category": "molestiae"
},
"itunes": {
"title": null,
"subtitle": "Suscipit doloribus.",
"summary": "Ut aut deserunt et.",
"author": null,
"type": "serial",
"block": false,
"explicit": false,
"complete": false,
"new_feed_url": "https://pfeifer.org/dicta-vitae-assumenda-consequatur-ut.html",
"category": [],
"logo": null
},
"podcastindex": {
"guid": "Mj2fSJddPVZAKYYDnifm",
"medium": "et",
"podping": true,
"license": {
"identifier": "Quisquam sit.",
"url": "http://marquardt.de/dolores-sed-rem-ea"
},
"locked": {
"value": "yes",
"owner": "lorenz88@reimer.com"
},
"update_frequency": {
"description": "Täglich",
"complete": false,
"dtstart": "2026-10-22T12:53:37.000000Z",
"rrule": "FREQ=DAILY"
},
"chat": [],
"trailer": [],
"blocks": [],
"fundings": [],
"images": [],
"locations": [],
"persons": [],
"txts": [],
"social_interacts": [],
"remote_items": [],
"podrolls": [],
"publisher": [],
"live_items": [],
"values": []
},
"logo": "https://podcaster.rest/images/help/cover_missing.svg?v=1"
},
"links": {
"self": "https://podcaster.rest/api/channels/JZQyXkN7n7IPQRms5B28",
"rss": "https://vjmfkq.podcaster.de/JZQyXkN7n7IPQRms5B28.rss",
"web": "",
"logo": "https://podcaster.rest/images/help/cover_missing.svg?v=1",
"remove_sync": false,
"logo_intern": "https://podcaster.rest/images/help/cover_missing.svg?v=1"
},
"shows_count": 0,
"imported": null
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create podcast
requires authentication
Creates a new podcast. Accessible with scope: feeds
Example request:
curl --request POST \
"https://podcaster.rest/v1/channels?channel=architecto" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"feed_id\": \"neuer-podcast\",
\"feed_url\": \"http:\\/\\/www.bailey.biz\\/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html\",
\"title\": \"Dies ist ein Podcast.\",
\"author\": \"Fabio\",
\"description\": \"Diese Episode ist über das podcaster API.\",
\"copyright\": \"Free to use\",
\"link\": \"https:\\/\\/beispiel.podcast.de\",
\"email\": \"cecil42@example.com\",
\"language\": \"y\",
\"category\": \"k\",
\"apple_podcasts_title\": \"c\",
\"apple_podcasts_subtitle\": \"Das ist der Untertitel\",
\"apple_podcasts_summary\": \"m\",
\"apple_podcasts_explicit\": false,
\"apple_podcasts_block\": false,
\"apple_podcasts_complete\": false,
\"apple_podcasts_author\": \"y\",
\"apple_podcasts_type\": \"episodic\",
\"channel_apple_podcasts_category\": [],
\"channel_domain\": {
\"protocol\": \"http\",
\"domain\": \"b\",
\"subdomain\": \"n\"
},
\"image_id\": \"architecto\",
\"podcast_index_guid\": \"n\",
\"podcast_index_medium\": \"g\",
\"podcast_index_uses_podping\": true,
\"podcast_index_license_node_value\": \"z\",
\"podcast_index_license_url\": \"http:\\/\\/rempel.com\\/sunt-nihil-accusantium-harum-mollitia\",
\"podcast_index_locked_node_value\": \"k\",
\"podcast_index_locked_owner\": \"h\",
\"podcast_index_update_frequency_node_value\": \"w\",
\"podcast_index_update_frequency_complete\": false,
\"podcast_index_update_frequency_dt_start\": \"2026-10-22T14:53:37\",
\"podcast_index_update_frequency_rrule\": \"a\",
\"podcast_index_trailer\": {
\"node_value\": \"y\",
\"url\": \"http:\\/\\/www.romaguera.net\\/aut-adipisci-quidem-nostrum-qui-commodi-incidunt-iure\",
\"pubdate\": \"2026-10-22T14:53:37\",
\"type\": \"r\",
\"season\": 4326.41688
},
\"podcast_index_chat\": {
\"server\": \"m\",
\"protocol\": \"i\",
\"accountId\": \"y\",
\"space\": \"v\"
},
\"podcast_index_blocks\": [
{
\"node_value\": \"d\",
\"service_id\": \"l\"
}
],
\"podcast_index_fundings\": [
{
\"node_value\": \"j\",
\"url\": \"http:\\/\\/tillman.com\\/\"
}
],
\"podcast_index_txts\": [
{
\"node_value\": \"h\",
\"purpose\": \"w\"
}
],
\"podcast_index_images\": [
{
\"href\": \"a\",
\"alt\": \"y\",
\"aspect_ratio\": \"kcmyuwpwlvqwrsit\",
\"width\": 4326.41688,
\"height\": 4326.41688,
\"type\": \"m\",
\"purpose\": \"i\"
}
],
\"podcast_index_locations\": [
{
\"node_value\": \"y\",
\"rel\": \"v\",
\"geo_latitude\": 4326.41688,
\"geo_longitude\": 4326.41688,
\"osm\": \"m\",
\"country\": \"iy\"
}
],
\"podcast_index_persons\": [
{
\"node_value\": \"v\",
\"role\": \"d\",
\"group\": \"l\",
\"img\": \"j\",
\"href\": \"n\"
}
],
\"podcast_index_social_interacts\": [
{
\"uri\": \"i\",
\"protocol\": \"k\",
\"account_id\": \"h\",
\"account_url\": \"http:\\/\\/www.dubuque.net\\/quo-omnis-nostrum-aut-adipisci\",
\"priority\": 4326.41688
}
],
\"podcast_index_remote_items\": [
{
\"feed_guid\": \"m\",
\"feed_url\": \"https:\\/\\/www.gulgowski.com\\/nihil-accusantium-harum-mollitia-modi-deserunt\",
\"item_guid\": \"w\",
\"medium\": \"a\",
\"title\": \"y\"
}
],
\"podcast_index_values\": [
{
\"type\": \"k\",
\"method\": \"c\",
\"suggested\": 4326.41688,
\"recipients\": [
{
\"name\": \"m\",
\"custom_key\": \"i\",
\"custom_value\": \"y\",
\"type\": \"v\",
\"address\": \"d\",
\"split\": 4326.41688,
\"fee\": false
}
]
}
],
\"podcast_index_live_items\": [
{
\"status\": \"miyvdl\",
\"start\": \"2026-10-22T14:53:37\",
\"end\": \"2026-10-22T14:53:37\",
\"content_links\": [
{
\"node_value\": \"j\",
\"href\": \"n\"
}
]
}
]
}"
const url = new URL(
"https://podcaster.rest/v1/channels"
);
const params = {
"channel": "architecto",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"feed_id": "neuer-podcast",
"feed_url": "http:\/\/www.bailey.biz\/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html",
"title": "Dies ist ein Podcast.",
"author": "Fabio",
"description": "Diese Episode ist über das podcaster API.",
"copyright": "Free to use",
"link": "https:\/\/beispiel.podcast.de",
"email": "cecil42@example.com",
"language": "y",
"category": "k",
"apple_podcasts_title": "c",
"apple_podcasts_subtitle": "Das ist der Untertitel",
"apple_podcasts_summary": "m",
"apple_podcasts_explicit": false,
"apple_podcasts_block": false,
"apple_podcasts_complete": false,
"apple_podcasts_author": "y",
"apple_podcasts_type": "episodic",
"channel_apple_podcasts_category": [],
"channel_domain": {
"protocol": "http",
"domain": "b",
"subdomain": "n"
},
"image_id": "architecto",
"podcast_index_guid": "n",
"podcast_index_medium": "g",
"podcast_index_uses_podping": true,
"podcast_index_license_node_value": "z",
"podcast_index_license_url": "http:\/\/rempel.com\/sunt-nihil-accusantium-harum-mollitia",
"podcast_index_locked_node_value": "k",
"podcast_index_locked_owner": "h",
"podcast_index_update_frequency_node_value": "w",
"podcast_index_update_frequency_complete": false,
"podcast_index_update_frequency_dt_start": "2026-10-22T14:53:37",
"podcast_index_update_frequency_rrule": "a",
"podcast_index_trailer": {
"node_value": "y",
"url": "http:\/\/www.romaguera.net\/aut-adipisci-quidem-nostrum-qui-commodi-incidunt-iure",
"pubdate": "2026-10-22T14:53:37",
"type": "r",
"season": 4326.41688
},
"podcast_index_chat": {
"server": "m",
"protocol": "i",
"accountId": "y",
"space": "v"
},
"podcast_index_blocks": [
{
"node_value": "d",
"service_id": "l"
}
],
"podcast_index_fundings": [
{
"node_value": "j",
"url": "http:\/\/tillman.com\/"
}
],
"podcast_index_txts": [
{
"node_value": "h",
"purpose": "w"
}
],
"podcast_index_images": [
{
"href": "a",
"alt": "y",
"aspect_ratio": "kcmyuwpwlvqwrsit",
"width": 4326.41688,
"height": 4326.41688,
"type": "m",
"purpose": "i"
}
],
"podcast_index_locations": [
{
"node_value": "y",
"rel": "v",
"geo_latitude": 4326.41688,
"geo_longitude": 4326.41688,
"osm": "m",
"country": "iy"
}
],
"podcast_index_persons": [
{
"node_value": "v",
"role": "d",
"group": "l",
"img": "j",
"href": "n"
}
],
"podcast_index_social_interacts": [
{
"uri": "i",
"protocol": "k",
"account_id": "h",
"account_url": "http:\/\/www.dubuque.net\/quo-omnis-nostrum-aut-adipisci",
"priority": 4326.41688
}
],
"podcast_index_remote_items": [
{
"feed_guid": "m",
"feed_url": "https:\/\/www.gulgowski.com\/nihil-accusantium-harum-mollitia-modi-deserunt",
"item_guid": "w",
"medium": "a",
"title": "y"
}
],
"podcast_index_values": [
{
"type": "k",
"method": "c",
"suggested": 4326.41688,
"recipients": [
{
"name": "m",
"custom_key": "i",
"custom_value": "y",
"type": "v",
"address": "d",
"split": 4326.41688,
"fee": false
}
]
}
],
"podcast_index_live_items": [
{
"status": "miyvdl",
"start": "2026-10-22T14:53:37",
"end": "2026-10-22T14:53:37",
"content_links": [
{
"node_value": "j",
"href": "n"
}
]
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/channels';
$response = $client->post(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'channel' => 'architecto',
],
'json' => [
'feed_id' => 'neuer-podcast',
'feed_url' => 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html',
'title' => 'Dies ist ein Podcast.',
'author' => 'Fabio',
'description' => 'Diese Episode ist über das podcaster API.',
'copyright' => 'Free to use',
'link' => 'https://beispiel.podcast.de',
'email' => 'cecil42@example.com',
'language' => 'y',
'category' => 'k',
'apple_podcasts_title' => 'c',
'apple_podcasts_subtitle' => 'Das ist der Untertitel',
'apple_podcasts_summary' => 'm',
'apple_podcasts_explicit' => false,
'apple_podcasts_block' => false,
'apple_podcasts_complete' => false,
'apple_podcasts_author' => 'y',
'apple_podcasts_type' => 'episodic',
'channel_apple_podcasts_category' => [],
'channel_domain' => ['protocol' => 'http', 'domain' => 'b', 'subdomain' => 'n'],
'image_id' => 'architecto',
'podcast_index_guid' => 'n',
'podcast_index_medium' => 'g',
'podcast_index_uses_podping' => true,
'podcast_index_license_node_value' => 'z',
'podcast_index_license_url' => 'http://rempel.com/sunt-nihil-accusantium-harum-mollitia',
'podcast_index_locked_node_value' => 'k',
'podcast_index_locked_owner' => 'h',
'podcast_index_update_frequency_node_value' => 'w',
'podcast_index_update_frequency_complete' => false,
'podcast_index_update_frequency_dt_start' => '2026-10-22T14:53:37',
'podcast_index_update_frequency_rrule' => 'a',
'podcast_index_trailer' => ['node_value' => 'y', 'url' => 'http://www.romaguera.net/aut-adipisci-quidem-nostrum-qui-commodi-incidunt-iure', 'pubdate' => '2026-10-22T14:53:37', 'type' => 'r', 'season' => 4326.41688],
'podcast_index_chat' => ['server' => 'm', 'protocol' => 'i', 'accountId' => 'y', 'space' => 'v'],
'podcast_index_blocks' => [
['node_value' => 'd', 'service_id' => 'l'],
],
'podcast_index_fundings' => [
['node_value' => 'j', 'url' => 'http://tillman.com/'],
],
'podcast_index_txts' => [
['node_value' => 'h', 'purpose' => 'w'],
],
'podcast_index_images' => [
['href' => 'a', 'alt' => 'y', 'aspect_ratio' => 'kcmyuwpwlvqwrsit', 'width' => 4326.41688, 'height' => 4326.41688, 'type' => 'm', 'purpose' => 'i'],
],
'podcast_index_locations' => [
['node_value' => 'y', 'rel' => 'v', 'geo_latitude' => 4326.41688, 'geo_longitude' => 4326.41688, 'osm' => 'm', 'country' => 'iy'],
],
'podcast_index_persons' => [
['node_value' => 'v', 'role' => 'd', 'group' => 'l', 'img' => 'j', 'href' => 'n'],
],
'podcast_index_social_interacts' => [
['uri' => 'i', 'protocol' => 'k', 'account_id' => 'h', 'account_url' => 'http://www.dubuque.net/quo-omnis-nostrum-aut-adipisci', 'priority' => 4326.41688],
],
'podcast_index_remote_items' => [
['feed_guid' => 'm', 'feed_url' => 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt', 'item_guid' => 'w', 'medium' => 'a', 'title' => 'y'],
],
'podcast_index_values' => [
[
'type' => 'k',
'method' => 'c',
'suggested' => 4326.41688,
'recipients' => [
['name' => 'm', 'custom_key' => 'i', 'custom_value' => 'y', 'type' => 'v', 'address' => 'd', 'split' => 4326.41688, 'fee' => false],
],
],
],
'podcast_index_live_items' => [
[
'status' => 'miyvdl',
'start' => '2026-10-22T14:53:37',
'end' => '2026-10-22T14:53:37',
'content_links' => [
['node_value' => 'j', 'href' => 'n'],
],
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/channels'
payload = {
"feed_id": "neuer-podcast",
"feed_url": "http:\/\/www.bailey.biz\/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html",
"title": "Dies ist ein Podcast.",
"author": "Fabio",
"description": "Diese Episode ist über das podcaster API.",
"copyright": "Free to use",
"link": "https:\/\/beispiel.podcast.de",
"email": "cecil42@example.com",
"language": "y",
"category": "k",
"apple_podcasts_title": "c",
"apple_podcasts_subtitle": "Das ist der Untertitel",
"apple_podcasts_summary": "m",
"apple_podcasts_explicit": false,
"apple_podcasts_block": false,
"apple_podcasts_complete": false,
"apple_podcasts_author": "y",
"apple_podcasts_type": "episodic",
"channel_apple_podcasts_category": [],
"channel_domain": {
"protocol": "http",
"domain": "b",
"subdomain": "n"
},
"image_id": "architecto",
"podcast_index_guid": "n",
"podcast_index_medium": "g",
"podcast_index_uses_podping": true,
"podcast_index_license_node_value": "z",
"podcast_index_license_url": "http:\/\/rempel.com\/sunt-nihil-accusantium-harum-mollitia",
"podcast_index_locked_node_value": "k",
"podcast_index_locked_owner": "h",
"podcast_index_update_frequency_node_value": "w",
"podcast_index_update_frequency_complete": false,
"podcast_index_update_frequency_dt_start": "2026-10-22T14:53:37",
"podcast_index_update_frequency_rrule": "a",
"podcast_index_trailer": {
"node_value": "y",
"url": "http:\/\/www.romaguera.net\/aut-adipisci-quidem-nostrum-qui-commodi-incidunt-iure",
"pubdate": "2026-10-22T14:53:37",
"type": "r",
"season": 4326.41688
},
"podcast_index_chat": {
"server": "m",
"protocol": "i",
"accountId": "y",
"space": "v"
},
"podcast_index_blocks": [
{
"node_value": "d",
"service_id": "l"
}
],
"podcast_index_fundings": [
{
"node_value": "j",
"url": "http:\/\/tillman.com\/"
}
],
"podcast_index_txts": [
{
"node_value": "h",
"purpose": "w"
}
],
"podcast_index_images": [
{
"href": "a",
"alt": "y",
"aspect_ratio": "kcmyuwpwlvqwrsit",
"width": 4326.41688,
"height": 4326.41688,
"type": "m",
"purpose": "i"
}
],
"podcast_index_locations": [
{
"node_value": "y",
"rel": "v",
"geo_latitude": 4326.41688,
"geo_longitude": 4326.41688,
"osm": "m",
"country": "iy"
}
],
"podcast_index_persons": [
{
"node_value": "v",
"role": "d",
"group": "l",
"img": "j",
"href": "n"
}
],
"podcast_index_social_interacts": [
{
"uri": "i",
"protocol": "k",
"account_id": "h",
"account_url": "http:\/\/www.dubuque.net\/quo-omnis-nostrum-aut-adipisci",
"priority": 4326.41688
}
],
"podcast_index_remote_items": [
{
"feed_guid": "m",
"feed_url": "https:\/\/www.gulgowski.com\/nihil-accusantium-harum-mollitia-modi-deserunt",
"item_guid": "w",
"medium": "a",
"title": "y"
}
],
"podcast_index_values": [
{
"type": "k",
"method": "c",
"suggested": 4326.41688,
"recipients": [
{
"name": "m",
"custom_key": "i",
"custom_value": "y",
"type": "v",
"address": "d",
"split": 4326.41688,
"fee": false
}
]
}
],
"podcast_index_live_items": [
{
"status": "miyvdl",
"start": "2026-10-22T14:53:37",
"end": "2026-10-22T14:53:37",
"content_links": [
{
"node_value": "j",
"href": "n"
}
]
}
]
}
params = {
'channel': 'architecto',
}
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload, params=params)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete podcast
requires authentication
Caution Removes a podcast. Accessible with scope: feeds
Example request:
curl --request DELETE \
"https://podcaster.rest/v1/channels/a07d83fb-55db-47a0-80fa-fd3cc28d0327" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://podcaster.rest/v1/channels/a07d83fb-55db-47a0-80fa-fd3cc28d0327"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/channels/a07d83fb-55db-47a0-80fa-fd3cc28d0327';
$response = $client->delete(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/channels/a07d83fb-55db-47a0-80fa-fd3cc28d0327'
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Statistics
List statistics datasets
requires authentication
Returns every dataset this API can serve, the statistics level it requires and
whether the authenticated account's package includes it. Use this to discover what
GET /v1/statistics/{dataset} will answer before calling it.
Example request:
curl --request GET \
--get "https://podcaster.rest/v1/statistics" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://podcaster.rest/v1/statistics"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/statistics';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/statistics'
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"dataset": "summary",
"description": "Totals for the range: Abrufe, unique listeners, hours listened, all-time Abrufe.",
"tab": "dashboard",
"requires_export": false,
"required_level": 1,
"required_level_name": "Starter",
"included": true,
"needs_range": true,
"parameters": []
}
],
"meta": {
"level": {
"value": 3,
"name": "Pro"
},
"tabs": [
"dashboard",
"hits",
"episodes",
"subscribers",
"audience",
"sources"
],
"exports": [
"csv",
"pdf",
"email"
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a statistics dataset
requires authentication
Every dataset takes the same scope parameters — from, to, channel, episode —
plus the ones listed for it by GET /v1/statistics. Figures cover the podcasts of
the authenticated account only.
Example request:
curl --request GET \
--get "https://podcaster.rest/v1/statistics/summary?from=2026-09-01&to=2026-09-30&channel=9f8e7d6c-5b4a-4321-8765-0a1b2c3d4e5f&grouping=daily&limit=50&format=json%0A%0ARate+limits+per+account%3A+40+requests%2Fminute+and+800%2Fhour+for+regular+datasets%2C%0A10%2Fminute+and+120%2Fhour+for+the+heavy+ones+%28%60insights.%2A%60%2C+%60explorer.%2A%60%2C+%60export.rows%60%2C%0A%60episodes.performance%60%2C+%60episodes.comparison%60%2C+%60audience.agents%60%2C+%60geo.points%60%29%2C+each%0Acounted+in+its+own+budget.+Exceeding+one+answers+429+with+a+%60Retry-After%60+header." \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"from\": \"2026-10-22\",
\"to\": \"2052-11-14\",
\"channel\": \"a4855dc5-0acb-33c3-b921-f4291f719ca0\",
\"episode\": \"c90237e9-ced5-3af6-88ea-84aeaa148878\",
\"grouping\": \"daily\",
\"limit\": 15,
\"order_by\": \"month_1\",
\"direction\": \"desc\",
\"episodes\": [
\"d6fa562b-acd5-35ff-babb-d11194d3737b\"
],
\"days\": 1,
\"weeks\": 5,
\"top\": 4,
\"min_episodes\": 17,
\"trend_days\": 5,
\"threshold\": 3,
\"country\": \"hw\",
\"service\": \"a\",
\"filters\": [
[
\"y\"
]
],
\"format\": \"json\"
}"
const url = new URL(
"https://podcaster.rest/v1/statistics/summary"
);
const params = {
"from": "2026-09-01",
"to": "2026-09-30",
"channel": "9f8e7d6c-5b4a-4321-8765-0a1b2c3d4e5f",
"grouping": "daily",
"limit": "50",
"format": "json
Rate limits per account: 40 requests/minute and 800/hour for regular datasets,
10/minute and 120/hour for the heavy ones (`insights.*`, `explorer.*`, `export.rows`,
`episodes.performance`, `episodes.comparison`, `audience.agents`, `geo.points`), each
counted in its own budget. Exceeding one answers 429 with a `Retry-After` header.",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"from": "2026-10-22",
"to": "2052-11-14",
"channel": "a4855dc5-0acb-33c3-b921-f4291f719ca0",
"episode": "c90237e9-ced5-3af6-88ea-84aeaa148878",
"grouping": "daily",
"limit": 15,
"order_by": "month_1",
"direction": "desc",
"episodes": [
"d6fa562b-acd5-35ff-babb-d11194d3737b"
],
"days": 1,
"weeks": 5,
"top": 4,
"min_episodes": 17,
"trend_days": 5,
"threshold": 3,
"country": "hw",
"service": "a",
"filters": [
[
"y"
]
],
"format": "json"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/statistics/summary';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'from' => '2026-09-01',
'to' => '2026-09-30',
'channel' => '9f8e7d6c-5b4a-4321-8765-0a1b2c3d4e5f',
'grouping' => 'daily',
'limit' => '50',
'format' => 'json
Rate limits per account: 40 requests/minute and 800/hour for regular datasets,
10/minute and 120/hour for the heavy ones (`insights.*`, `explorer.*`, `export.rows`,
`episodes.performance`, `episodes.comparison`, `audience.agents`, `geo.points`), each
counted in its own budget. Exceeding one answers 429 with a `Retry-After` header.',
],
'json' => [
'from' => '2026-10-22',
'to' => '2052-11-14',
'channel' => 'a4855dc5-0acb-33c3-b921-f4291f719ca0',
'episode' => 'c90237e9-ced5-3af6-88ea-84aeaa148878',
'grouping' => 'daily',
'limit' => 15,
'order_by' => 'month_1',
'direction' => 'desc',
'episodes' => ['d6fa562b-acd5-35ff-babb-d11194d3737b'],
'days' => 1,
'weeks' => 5,
'top' => 4,
'min_episodes' => 17,
'trend_days' => 5,
'threshold' => 3,
'country' => 'hw',
'service' => 'a',
'filters' => [
['y'],
],
'format' => 'json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/statistics/summary'
payload = {
"from": "2026-10-22",
"to": "2052-11-14",
"channel": "a4855dc5-0acb-33c3-b921-f4291f719ca0",
"episode": "c90237e9-ced5-3af6-88ea-84aeaa148878",
"grouping": "daily",
"limit": 15,
"order_by": "month_1",
"direction": "desc",
"episodes": [
"d6fa562b-acd5-35ff-babb-d11194d3737b"
],
"days": 1,
"weeks": 5,
"top": 4,
"min_episodes": 17,
"trend_days": 5,
"threshold": 3,
"country": "hw",
"service": "a",
"filters": [
[
"y"
]
],
"format": "json"
}
params = {
'from': '2026-09-01',
'to': '2026-09-30',
'channel': '9f8e7d6c-5b4a-4321-8765-0a1b2c3d4e5f',
'grouping': 'daily',
'limit': '50',
'format': 'json
Rate limits per account: 40 requests/minute and 800/hour for regular datasets,
10/minute and 120/hour for the heavy ones (`insights.*`, `explorer.*`, `export.rows`,
`episodes.performance`, `episodes.comparison`, `audience.agents`, `geo.points`), each
counted in its own budget. Exceeding one answers 429 with a `Retry-After` header.',
}
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Example response (403, dataset not included in the package):
{
"message": "The package of this account does not include the dataset \"insights.anomalies\".",
"dataset": "insights.anomalies",
"current_level": 2,
"current_level_name": "Standard",
"required_level": 4,
"required_level_name": "Maxi"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
User
Get user
requires authentication
Fetches details about authenticated user.
Example request:
curl --request GET \
--get "https://podcaster.rest/v1/user" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://podcaster.rest/v1/user"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/user';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/user'
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"type": "user",
"id": 24024,
"attributes": {
"id": 24024,
"name": "Renate Rudolph",
"first_name": "Renate",
"last_name": "Rudolph",
"username": "testing-kleinsigrid1881",
"email": "ibender@example.org",
"name_title": null,
"telephone": "+49 (0761) 71733",
"telefax": "+49228441 5490",
"url": "http://niemann.com/molestias-fugit-deleniti-distinctio-eum-doloremque-id",
"organisation": "Jordan e.V.",
"department": null,
"street": "Jungring",
"housenumber": "339",
"city": "Leutkirch im Allgäu",
"country": "TG",
"post_code": "80089",
"representative": null,
"mediarepresentative": null,
"register_court": null,
"register_number": null,
"board": null,
"chairman": null,
"controlling_authority": null,
"additional_specifications": null,
"avatar": null
},
"links": {
"self": "https://podcaster.rest/api/user"
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Update current user profile
requires authentication
Updates the authenticated user's contact/billing details. Accessible with scope: user.
PUT semantics: any field present in {@see UserRequest}'s rules that
is NOT supplied is reset to an empty string. To leave a value
unchanged, re-send its current value. last_name and country are
required; the rest are nullable.
Example request:
curl --request PUT \
"https://podcaster.rest/v1/user" \
--header "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name_title\": \"Prof\",
\"first_name\": \"Fabio\",
\"last_name\": \"Bacigalupo\",
\"telephone\": \"030-549072653\",
\"telefax\": \"030-549072660\",
\"url\": \"https:\\/\\/www.podcaster.de\",
\"organisation\": \"Podcast Plattform\",
\"department\": \"IT\",
\"street\": \"Brunnenstraße\",
\"housenumber\": \"147\",
\"city\": \"Berlin\",
\"country\": \"DE\",
\"post_code\": \"10115\",
\"representative\": \"Fabio Bacigalupo\",
\"mediarepresentative\": \"Steffen Wrede\",
\"register_court\": \"Berlin\",
\"register_number\": \"1234567890\",
\"board\": \"Yvonne Ständin\",
\"chairman\": \"Frauke Vorsätzer\",
\"controlling_authority\": \"Bafa\",
\"additional_specifications\": \"Hier kann ein beliebiger Freitext ergänzt werden.\"
}"
const url = new URL(
"https://podcaster.rest/v1/user"
);
const headers = {
"Authorization": "Bearer {YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name_title": "Prof",
"first_name": "Fabio",
"last_name": "Bacigalupo",
"telephone": "030-549072653",
"telefax": "030-549072660",
"url": "https:\/\/www.podcaster.de",
"organisation": "Podcast Plattform",
"department": "IT",
"street": "Brunnenstraße",
"housenumber": "147",
"city": "Berlin",
"country": "DE",
"post_code": "10115",
"representative": "Fabio Bacigalupo",
"mediarepresentative": "Steffen Wrede",
"register_court": "Berlin",
"register_number": "1234567890",
"board": "Yvonne Ständin",
"chairman": "Frauke Vorsätzer",
"controlling_authority": "Bafa",
"additional_specifications": "Hier kann ein beliebiger Freitext ergänzt werden."
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://podcaster.rest/v1/user';
$response = $client->put(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name_title' => 'Prof',
'first_name' => 'Fabio',
'last_name' => 'Bacigalupo',
'telephone' => '030-549072653',
'telefax' => '030-549072660',
'url' => 'https://www.podcaster.de',
'organisation' => 'Podcast Plattform',
'department' => 'IT',
'street' => 'Brunnenstraße',
'housenumber' => '147',
'city' => 'Berlin',
'country' => 'DE',
'post_code' => '10115',
'representative' => 'Fabio Bacigalupo',
'mediarepresentative' => 'Steffen Wrede',
'register_court' => 'Berlin',
'register_number' => '1234567890',
'board' => 'Yvonne Ständin',
'chairman' => 'Frauke Vorsätzer',
'controlling_authority' => 'Bafa',
'additional_specifications' => 'Hier kann ein beliebiger Freitext ergänzt werden.',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://podcaster.rest/v1/user'
payload = {
"name_title": "Prof",
"first_name": "Fabio",
"last_name": "Bacigalupo",
"telephone": "030-549072653",
"telefax": "030-549072660",
"url": "https:\/\/www.podcaster.de",
"organisation": "Podcast Plattform",
"department": "IT",
"street": "Brunnenstraße",
"housenumber": "147",
"city": "Berlin",
"country": "DE",
"post_code": "10115",
"representative": "Fabio Bacigalupo",
"mediarepresentative": "Steffen Wrede",
"register_court": "Berlin",
"register_number": "1234567890",
"board": "Yvonne Ständin",
"chairman": "Frauke Vorsätzer",
"controlling_authority": "Bafa",
"additional_specifications": "Hier kann ein beliebiger Freitext ergänzt werden."
}
headers = {
'Authorization': 'Bearer {YOUR_ACCESS_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.