Your API project: credits, feeds and shows, preferences, email reports
List every project your key belongs to. This is the only project endpoint that does not take a project ID. take the _id of a ProjectOverview here and use it for every other one.
200The projects.The projects.
curl -X GET "https://api.fountain.fm/v1/projects" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"projects": [
{
"_id": "j7k8l9m0n1o2",
"meta": {
"label": "My Podcast Network"
},
"credits": 100,
"feeds": [
"a1b2c3d4"
],
"shows": [
"def456"
],
"billing": {
"subscription": "sub_1A2b3C4d5E6f"
}
}
]
}Get an overview of your project: its remaining credits, connected feeds and shows, preferences.
idstringrequiredYour project ID.
200The project overview.The project.
curl -X GET "https://api.fountain.fm/v1/projects/{id}" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"project": {
"_id": "j7k8l9m0n1o2",
"meta": {
"label": "My Podcast Network"
},
"credits": 100,
"feeds": [
"a1b2c3d4"
],
"shows": [
"def456"
],
"billing": {
"subscription": "sub_1A2b3C4d5E6f"
}
}
}Report how far transcript indexing has got, one row per show connected to the project.
idstringrequiredYour project ID.
200The indexing stats.transcriptsobject[]requiredOne row per connected show.
The show the row covers.
episodesnumberrequiredEpisodes in the show.
indexednumberrequiredEpisodes with an indexed transcript.
indexingnumberrequiredEpisodes queued for, or in the middle of, transcription.
failednumberrequiredEpisodes whose transcription failed and will not be retried.
curl -X GET "https://api.fountain.fm/v1/projects/{id}/stats" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"transcripts": [
{
"show": "show:id:def456",
"episodes": 120,
"indexed": 96,
"indexing": 4,
"failed": 2
}
]
}Load your project’s preferences: a Markdown document recording how you want an agent to work on your behalf. Agents are expected to load it at the start of every session, and it is the only place their user data persists between sessions. Empty until something is recorded.
The document carries no frontmatter and uses only these ## headings, each kept succinct:
Narratives: stories and angles wanted for clips and posts.Editorial: tone, structure, and rules for what to make and when to publish it.Captions: caption style, e.g. font, position, and case.Other: everything else.idstringrequiredYour project ID.
200The project preferences.preferencesstringrequiredThe preferences document as Markdown. An empty string when none are set.
curl -X GET "https://api.fountain.fm/v1/projects/{id}/preferences" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY"{
"preferences": "## Editorial\n\nCasual and direct. No emoji.\n\n## Captions\n\nBold sans-serif, bottom third, sentence case."
}Record a new preference as soon as it is given. The value sent replaces the stored document in full, so read it first via Load Project Preferences, which also documents the headings to use, and send it back with the addition folded in. Pass an empty string to clear it.
idstringrequiredYour project ID.
preferencesstringrequiredProject preferences in Markdown.
200The preferences were saved.okbooleanrequiredAlways true on success.
curl -X PATCH "https://api.fountain.fm/v1/projects/{id}/preferences" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"preferences":"## Editorial\n\nCasual and direct. No emoji.\n\n## Captions\n\nBold sans-serif, bottom third, sentence case."}'{
"preferences": "## Editorial\n\nCasual and direct. No emoji.\n\n## Captions\n\nBold sans-serif, bottom third, sentence case."
}{
"ok": true
}Connect a show you own to your project. Find it first with Search Content and send the _id of the ContentHit it returns.
idstringrequiredYour project ID.
ID of the show to connect.
200The connected show.The connected show.
400The `show` ID is missing, malformed, or not a show.403The key is not an admin of the project.404No show with that ID exists.curl -X POST "https://api.fountain.fm/v1/projects/{id}/shows" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"show":"show:id:def456"}'{
"show": "show:id:def456"
}{
"show": {
"_id": "episode:id:abc123",
"_type": "EPISODE",
"_guid": "abcdef",
"info": {
"title": "#2394 - Palmer Luckey",
"subtitle": "The Joe Rogan Experience",
"publisher": "Joe Rogan",
"audio": "https://example.com/episodes/abc123/audio.mp3",
"video": "https://example.com/episodes/abc123/video.m3u8",
"duration": 11294,
"published": "2025-10-16T17:00:00.000Z"
},
"links": [
"show:id:def456"
]
}
}Send Markdown-formatted email to report anything project-related, e.g. episode performance or candidate clips.
idstringrequiredYour project ID.
method'EMAIL'requiredDelivery method.
destinationstringrequiredRecipient email address.
titlestringrequiredReport title in plain text.
markdownstringrequiredReport body in Markdown.
200Email sent successfully.curl -X POST "https://api.fountain.fm/v1/projects/{id}/reports" \
-H "Authorization: Bearer $FOUNTAIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"method":"EMAIL","destination":"alice@example.com","title":"Weekly Report","markdown":"## Episode Trends\n\nYour latest episode..."}'{
"method": "EMAIL",
"destination": "alice@example.com",
"title": "Weekly Report",
"markdown": "## Episode Trends\n\nYour latest episode..."
}