Manage hosted feeds and items. Feeds represent shows; items represent episodes.
List every feed you can access.
200Your feeds.The feeds you host.
curl -X GET "https://api.fountain.fm/v1/feeds" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"ok": true,
"feeds": [
{
"id": "a1b2c3d4",
"fountain_id": "show:id:def456",
"title": "Citadel Dispatch",
"author": "ODELL",
"description": "Freedom tech and Bitcoin, live and unedited.",
"categories": [
"Technology",
"News"
],
"explicit": false,
"display_email": false,
"links": [
"https://citadeldispatch.com"
],
"image": "https://media.fountain.fm/shows/a1b2c3d4/cover.jpg",
"vocabulary": [
"Nostr",
"sats"
],
"rss_url": "https://feeds.fountain.fm/a1b2c3d4",
"updated": "2026-02-18T22:03:53.467Z"
}
]
}Load a feed by ID.
feed_idstringrequiredThe feed to read.
200The feed.The feed.
curl -X GET "https://api.fountain.fm/v1/feeds/{feed_id}" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"ok": true,
"feed": {
"id": "a1b2c3d4",
"fountain_id": "show:id:def456",
"title": "Citadel Dispatch",
"author": "ODELL",
"description": "Freedom tech and Bitcoin, live and unedited.",
"categories": [
"Technology",
"News"
],
"explicit": false,
"display_email": false,
"links": [
"https://citadeldispatch.com"
],
"image": "https://media.fountain.fm/shows/a1b2c3d4/cover.jpg",
"vocabulary": [
"Nostr",
"sats"
],
"rss_url": "https://feeds.fountain.fm/a1b2c3d4",
"updated": "2026-02-18T22:03:53.467Z"
}
}Set fields with values, clear them with null, or omit them to leave them unchanged. For image_id, use a READY FEED_IMAGE upload from Start Upload. Published feeds require title, author, description, image_id and categories; these cannot be cleared.
feed_idstringrequiredThe feed to edit.
Omitted fields stay unchanged. null clears a nullable field.
titlestring | nulloptionalFeed title.
authorstring | nulloptionalFeed author.
descriptionstring | nulloptionalFeed description in Markdown. Max 4000 characters when converted to HTML.
Apple Podcasts categories. Max 3.
explicitboolean | nulloptionalMark the feed as explicit.
display_emailboolean | nulloptionalShow the owner email in the feed.
linksstring[] | nulloptionalAssociated URLs. Max 3.
vocabularystring[] | nulloptionalTerms that help the AI transcriber. Max 224 tokens.
image_idstring | nulloptionalID of a READY FEED_IMAGE upload.
200The updated feed.The updated feed.
curl -X PATCH "https://api.fountain.fm/v1/feeds/{feed_id}" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Citadel Dispatch","categories":["Technology","News"],"explicit":false}'{
"title": "Citadel Dispatch",
"categories": [
"Technology",
"News"
],
"explicit": false
}{
"ok": true,
"feed": {
"id": "a1b2c3d4",
"fountain_id": "show:id:def456",
"title": "Citadel Dispatch",
"author": "ODELL",
"description": "Freedom tech and Bitcoin, live and unedited.",
"categories": [
"Technology",
"News"
],
"explicit": false,
"display_email": false,
"links": [
"https://citadeldispatch.com"
],
"image": "https://media.fountain.fm/shows/a1b2c3d4/cover.jpg",
"vocabulary": [
"Nostr",
"sats"
],
"rss_url": "https://feeds.fountain.fm/a1b2c3d4",
"updated": "2026-02-18T22:03:53.467Z"
}
}Get downloads and, for published feeds, payments. Artist downloads come from their albums. group_by coverage: CONTENT and APP include both; COUNTRY, KIND and PLATFORM include downloads only (revenue and supporters are 0); ACTION and SUPPORTER include payments only (downloads are 0). group.content is an item ID, or an album feed ID for artists. Deleted items and livestreams count toward totals but are omitted from breakdowns.
feed_idstringrequiredThe feed to read stats for.
startstringoptionalISO-8601 inclusive range start; also enables the previous comparison window.
endstringoptionalISO-8601 inclusive range end.
bucketstringoptionalBucket size for the buckets time series: DAY, WEEK or MONTH. Omit for totals only.
group_bystringoptionalComma-separated breakdown dimensions: CONTENT, COUNTRY, KIND, PLATFORM, APP, ACTION, SUPPORTER.
200The feed stats.The feed stats.
curl -X GET "https://api.fountain.fm/v1/feeds/{feed_id}/stats" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"ok": true,
"stats": {
"rows": [
{
"group": {},
"total": {
"downloads": 1240,
"revenue_usd": 32.5,
"revenue_satoshis": 48210,
"supporters": 18
},
"previous": {
"downloads": 980,
"revenue_usd": 24,
"revenue_satoshis": 35600,
"supporters": 14
}
}
],
"meta": {}
}
}List items newest first, up to 100 per page. Pass next_cursor as cursor for the next page; it is absent on the last page.
feed_idstringrequiredThe feed whose items to list.
cursorstringoptionalA next_cursor from a previous page. Omit for the first page.
200A page of items.The items.
next_cursorstringoptionalPass back as ?cursor= for the next page. Absent on the last page.
curl -X GET "https://api.fountain.fm/v1/feeds/{feed_id}/items" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"ok": true,
"items": [
{
"id": "e5f6g7h8",
"fountain_id": "episode:id:abc123",
"title": "The Genesis Block",
"description": "We dig into the **first block** ever mined.",
"season_number": 2,
"item_number": 14,
"links": [
"https://citadeldispatch.com/cd141"
],
"explicit": false,
"status": "PUBLISHED",
"image": "https://media.fountain.fm/episodes/e5f6g7h8/cover.jpg",
"audio_default": "https://media.fountain.fm/episodes/e5f6g7h8/audio.mp3",
"bonus": false,
"adfree": false,
"early_access": false,
"published": "2026-02-18T22:03:53.467Z",
"updated": "2026-02-18T22:03:53.467Z"
}
],
"next_cursor": "eyJpZCI6ImU1ZjZnN2g4In0"
}Create a DRAFT item, then set its fields with Update Item.
feed_idstringrequiredThe feed to add the item to.
200The new draft item.The new item.
curl -X POST "https://api.fountain.fm/v1/feeds/{feed_id}/items" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"ok": true,
"item": {
"id": "e5f6g7h8",
"status": "DRAFT",
"updated": "2026-02-18T22:03:53.467Z"
}
}Load an item by ID.
feed_idstringrequiredThe feed the item belongs to.
item_idstringrequiredThe item to read.
200The item.The item.
curl -X GET "https://api.fountain.fm/v1/feeds/{feed_id}/items/{item_id}" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"ok": true,
"item": {
"id": "e5f6g7h8",
"fountain_id": "episode:id:abc123",
"title": "The Genesis Block",
"description": "We dig into the **first block** ever mined.",
"season_number": 2,
"item_number": 14,
"links": [
"https://citadeldispatch.com/cd141"
],
"explicit": false,
"status": "PUBLISHED",
"image": "https://media.fountain.fm/episodes/e5f6g7h8/cover.jpg",
"audio_default": "https://media.fountain.fm/episodes/e5f6g7h8/audio.mp3",
"bonus": false,
"adfree": false,
"early_access": false,
"published": "2026-02-18T22:03:53.467Z",
"updated": "2026-02-18T22:03:53.467Z"
}
}Set fields with values, clear them with null, or omit them to leave them unchanged. Media IDs must reference READY uploads of the matching type and access: PAID for *_paid_id, DEFAULT for *_default_id. Video fills the matching audio slot with extracted audio if that slot is empty. Paid features require audio_paid_id. The one-time price is price_usd_cents, defaulting to 100 on first enable. Published items cannot change monetization variant or clear required media.
feed_idstringrequiredThe feed the item belongs to.
item_idstringrequiredThe item to edit.
Omitted fields stay unchanged. null clears a nullable field.
titlestringoptionalItem title.
descriptionstring | nulloptionalItem description in Markdown. Max 10000 characters when converted to HTML.
season_numbernumber | nulloptionalSeason number.
item_numbernumber | nulloptionalItem number within the season.
linksstring[] | nulloptionalAssociated URLs. Max 3.
explicitboolean | nulloptionalMark the item as explicit.
audio_default_idstring | nulloptionalID of a READY ITEM_AUDIO upload for the free audio.
audio_paid_idstring | nulloptionalID of a READY ITEM_AUDIO upload for the paid audio.
video_default_idstring | nulloptionalID of a READY ITEM_VIDEO upload for the free video.
video_paid_idstring | nulloptionalID of a READY ITEM_VIDEO upload for the paid video.
image_idstring | nulloptionalID of a READY ITEM_IMAGE upload.
bonusbooleanoptionalMake the item subscriber-only. Cannot change after publishing.
adfreebooleanoptionalOffer a paid ad-free version. Not for bonus items.
early_accessbooleanoptionalOffer a paid early-access version. Not for bonus items.
early_access_daysnumberoptionalEarly-access window in days.
price_usd_centsnumberoptionalPrice of the paid version in USD cents.
200The updated item.The updated item.
curl -X PATCH "https://api.fountain.fm/v1/feeds/{feed_id}/items/{item_id}" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"The Genesis Block","audio_default_id":"6f1a2b3c-4d5e-6f70-8901-23456789abcd"}'{
"title": "The Genesis Block",
"audio_default_id": "6f1a2b3c-4d5e-6f70-8901-23456789abcd"
}{
"ok": true,
"item": {
"id": "e5f6g7h8",
"fountain_id": "episode:id:abc123",
"title": "The Genesis Block",
"description": "We dig into the **first block** ever mined.",
"season_number": 2,
"item_number": 14,
"links": [
"https://citadeldispatch.com/cd141"
],
"explicit": false,
"status": "PUBLISHED",
"image": "https://media.fountain.fm/episodes/e5f6g7h8/cover.jpg",
"audio_default": "https://media.fountain.fm/episodes/e5f6g7h8/audio.mp3",
"bonus": false,
"adfree": false,
"early_access": false,
"published": "2026-02-18T22:03:53.467Z",
"updated": "2026-02-18T22:03:53.467Z"
}
}Set the item’s status to DELETED and remove it from the feed.
feed_idstringrequiredThe feed the item belongs to.
item_idstringrequiredThe item to delete.
200The deleted item.The deleted item.
curl -X DELETE "https://api.fountain.fm/v1/feeds/{feed_id}/items/{item_id}" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"ok": true,
"item": {
"id": "e5f6g7h8",
"fountain_id": "episode:id:abc123",
"title": "The Genesis Block",
"description": "We dig into the **first block** ever mined.",
"season_number": 2,
"item_number": 14,
"links": [
"https://citadeldispatch.com/cd141"
],
"explicit": false,
"status": "DELETED",
"image": "https://media.fountain.fm/episodes/e5f6g7h8/cover.jpg",
"audio_default": "https://media.fountain.fm/episodes/e5f6g7h8/audio.mp3",
"bonus": false,
"adfree": false,
"early_access": false,
"published": "2026-02-18T22:03:53.467Z",
"updated": "2026-02-18T22:03:53.467Z"
}
}Publish a DRAFT or SCHEDULED item and regenerate the feed. Requires a title and default audio. No request body.
feed_idstringrequiredThe feed the item belongs to.
item_idstringrequiredThe item to publish.
200The published item.The published item.
curl -X POST "https://api.fountain.fm/v1/feeds/{feed_id}/items/{item_id}/publish" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"ok": true,
"item": {
"id": "e5f6g7h8",
"fountain_id": "episode:id:abc123",
"title": "The Genesis Block",
"description": "We dig into the **first block** ever mined.",
"season_number": 2,
"item_number": 14,
"links": [
"https://citadeldispatch.com/cd141"
],
"explicit": false,
"status": "PUBLISHED",
"image": "https://media.fountain.fm/episodes/e5f6g7h8/cover.jpg",
"audio_default": "https://media.fountain.fm/episodes/e5f6g7h8/audio.mp3",
"bonus": false,
"adfree": false,
"early_access": false,
"published": "2026-02-18T22:03:53.467Z",
"updated": "2026-02-18T22:03:53.467Z"
}
}Set a DRAFT or SCHEDULED item to SCHEDULED for automatic release at scheduled. Requires a title and default audio.
feed_idstringrequiredThe feed the item belongs to.
item_idstringrequiredThe item to schedule.
scheduledstringrequiredPublish time as a future ISO-8601 instant.
200The scheduled item.The scheduled item.
curl -X POST "https://api.fountain.fm/v1/feeds/{feed_id}/items/{item_id}/schedule" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"scheduled":"2026-07-01T09:00:00Z"}'{
"scheduled": "2026-07-01T09:00:00Z"
}{
"ok": true,
"item": {
"id": "e5f6g7h8",
"fountain_id": "episode:id:abc123",
"title": "The Genesis Block",
"description": "We dig into the **first block** ever mined.",
"season_number": 2,
"item_number": 14,
"links": [
"https://citadeldispatch.com/cd141"
],
"explicit": false,
"status": "SCHEDULED",
"image": "https://media.fountain.fm/episodes/e5f6g7h8/cover.jpg",
"audio_default": "https://media.fountain.fm/episodes/e5f6g7h8/audio.mp3",
"bonus": false,
"adfree": false,
"early_access": false,
"published": "2026-02-18T22:03:53.467Z",
"updated": "2026-02-18T22:03:53.467Z"
}
}Get item stats using the response format and parameters of Feed Stats. Supports podcast and album feeds. Artist feeds return 404 ITEM_NOT_FOUND; use Feed Stats for each album. group_by=CONTENT returns 400 BAD_REQUEST.
feed_idstringrequiredThe feed the item belongs to.
item_idstringrequiredThe item to read stats for.
startstringoptionalISO-8601 inclusive range start; also enables the previous comparison window.
endstringoptionalISO-8601 inclusive range end.
bucketstringoptionalBucket size for the buckets time series: DAY, WEEK or MONTH. Omit for totals only.
group_bystringoptionalComma-separated breakdown dimensions: COUNTRY, KIND, PLATFORM, APP, ACTION, SUPPORTER.
200The item stats.The item stats.
curl -X GET "https://api.fountain.fm/v1/feeds/{feed_id}/items/{item_id}/stats" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"ok": true,
"stats": {
"rows": [
{
"group": {},
"total": {
"downloads": 1240,
"revenue_usd": 32.5,
"revenue_satoshis": 48210,
"supporters": 18
},
"previous": {
"downloads": 980,
"revenue_usd": 24,
"revenue_satoshis": 35600,
"supporters": 14
}
}
],
"meta": {}
}
}