A REST API for everything
Podcasts, episodes, uploads, members, webhooks — every action in the dashboard is also a /api/v1 endpoint you can script.
Hear the signala synth drives this page
ON AIRAPI-first podcast hosting
POSTMast gives solo podcasters and small teams one platform with two front doors: a clean dashboard and a full REST API for the same things — uploading audio, managing episodes, and serving standards-compliant RSS. Everything you can click, you can curl.
Email & password or magic link — your choice.
$ curl -X POST "$HOST/api/v1/podcasts/$POD/episodes" \
-H "Authorization: Bearer ptk_live_…" \
-d '{ "title": "Ep. 12" }'
{ "publishState": "draft", "rssGuid": "5b29c1e4-…" }
$ The signal path
Every episode travels the same five hops. The line below draws itself as you scroll — pure CSS, no JavaScript.
01 · Presign
One authenticated request returns a short-lived URL that writes straight into Cloudflare R2. No multipart forms, no app-server middlemen.
POST /api/v1/uploads/presign02 · Upload
Your MP3 streams from your machine to object storage, then one confirmation call verifies the bytes actually landed.
PUT $PRESIGNED_URL03 · Publish
Create the episode over REST, attach the finished upload, and publish — or schedule it and let the queue worker flip it for you.
POST /api/v1/episodes/$ID/publish04 · Syndicate
Standards-compliant RSS with iTunes and podcast-namespace tags, served at your show's public URL and checked by a built-in validator.
GET /p/your-show/feed.xml05 · Deliver
A Cloudflare Worker fronts your media with signed URLs, so listeners stream fast and your storage bucket never has to be public.
302 → signed media URLThe console
The platform covers the whole path from raw audio file to a feed your listeners' apps can subscribe to.
Podcasts, episodes, uploads, members, webhooks — every action in the dashboard is also a /api/v1 endpoint you can script.
Issue tokens scoped to your user, one organization, or a single podcast — optionally read-only — and revoke them at any time.
Feeds carry iTunes and podcast-namespace tags, are served at /p/your-slug/feed.xml, and can be checked with the built-in validator.
Audio goes from your machine to Cloudflare R2 through short-lived presigned URLs — large files never pass through an app server.
Episode audio is served through a Cloudflare Worker CDN with signed URLs, so your storage bucket never has to be public.
Organizations with owner and member roles, plus per-podcast read or read-write access for collaborators.
Also included: episode analytics, HMAC-signed webhook deliveries, scheduled publishing, and billing through Paddle.
4
API calls from raw audio file to published episode
0
app servers your audio passes through on its way to R2
100%
of dashboard actions also available over REST
1
feed URL your listeners will ever need
The transmitter
Four steps take an audio file from your disk to a published episode. These are the live /api/v1 endpoints, not pseudocode.
One request returns a short-lived URL that writes directly to Cloudflare R2.
$ curl -X POST "$HOST/api/v1/uploads/presign" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{ "organizationId": "b5f8…", "filename": "ep-12.mp3", "mimeType": "audio/mpeg" }'
{ "uploadId": "41cf…", "storageKey": "…", "presignedUrl": "https://….r2.cloudflarestorage.com/…" }Push the file to the presigned URL, then confirm it — the platform verifies the object landed in R2.
$ curl -X PUT --upload-file ep-12.mp3 -H "Content-Type: audio/mpeg" "$PRESIGNED_URL"
$ curl -X POST "$HOST/api/v1/uploads/$UPLOAD_ID/complete" -H "Authorization: Bearer $TOKEN"Create the episode, then link the finished upload to it. Publishing requires an attached upload.
$ curl -X PATCH "$HOST/api/v1/episodes/$EPISODE_ID" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{ "uploadId": "41cf…" }'
{ "uploadId": "41cf…", "publishState": "draft", …}Flip it live. The public feed at /p/your-podcast/feed.xml reflects it on the next fetch.
$ curl -X POST "$HOST/api/v1/episodes/$EPISODE_ID/publish" -H "Authorization: Bearer $TOKEN"
{ "publishState": "published", …}ON AIR
POST awayCreate an account, mint an API token, and publish from the dashboard or your terminal — whichever you reach for first.