Hear the signala synth drives this page

ON AIRAPI-first podcast hosting

Your show, on the air, in one POST

Mast 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.

UploadR2 direct
EpisodeAPI ready
FeedRSS valid
broadcast.sh
$ 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

From waveform to world

Every episode travels the same five hops. The line below draws itself as you scroll — pure CSS, no JavaScript.

  1. 01 · Presign

    Ask for a door into edge storage

    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/presign
  2. 02 · Upload

    Audio goes disk → edge, nothing in between

    Your MP3 streams from your machine to object storage, then one confirmation call verifies the bytes actually landed.

    PUT $PRESIGNED_URL
  3. 03 · Publish

    Create, attach, flip it live

    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/publish
  4. 04 · Syndicate

    A feed every podcast app understands

    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.xml
  5. 05 · Deliver

    Signed audio from a global CDN

    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 URL

The console

Everything a feed needs, nothing it doesn't

The platform covers the whole path from raw audio file to a feed your listeners' apps can subscribe to.

A REST API for everything

Podcasts, episodes, uploads, members, webhooks — every action in the dashboard is also a /api/v1 endpoint you can script.

Scoped API tokens

Issue tokens scoped to your user, one organization, or a single podcast — optionally read-only — and revoke them at any time.

Standards-compliant RSS

Feeds carry iTunes and podcast-namespace tags, are served at /p/your-slug/feed.xml, and can be checked with the built-in validator.

Uploads straight to R2

Audio goes from your machine to Cloudflare R2 through short-lived presigned URLs — large files never pass through an app server.

Signed media delivery

Episode audio is served through a Cloudflare Worker CDN with signed URLs, so your storage bucket never has to be public.

Built for small teams

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

RSS 2.0iTunes tagspodcast: namespacePresigned R2 uploadsSigned CDN URLsHMAC webhooksScoped tokensMagic linksScheduled publishingEpisode analyticsOpenAPI specllms.txt

The transmitter

Ship an episode without opening a browser

Four steps take an audio file from your disk to a published episode. These are the live /api/v1 endpoints, not pseudocode.

1

Presign an upload

One request returns a short-lived URL that writes directly to Cloudflare R2.

step-1.sh
$ 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/…" }
2

Upload the audio, then mark it complete

Push the file to the presigned URL, then confirm it — the platform verifies the object landed in R2.

step-2.sh
$ 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"
3

Attach the upload to your episode

Create the episode, then link the finished upload to it. Publishing requires an attached upload.

step-3.sh
$ 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", …}
4

Publish

Flip it live. The public feed at /p/your-podcast/feed.xml reflects it on the next fetch.

step-4.sh
$ curl -X POST "$HOST/api/v1/episodes/$EPISODE_ID/publish" -H "Authorization: Bearer $TOKEN"

{ "publishState": "published", …}

ON AIR

Your next episode is one POST away

Create an account, mint an API token, and publish from the dashboard or your terminal — whichever you reach for first.