Skip to content
The call

Call-and-response audio on the AT Protocol

The response

Someone records a question. Other people record answers. Antiphony stores both as portable dev.antiphony.* records, transcribes and cleans up the audio when you ask, and gives your app one REST API for all of it. MIT-licensed.

01

What does a post look like?

Both halves are the same record, dev.antiphony.audio.post. A post with no reply field is a prompt. A post that points back at one is a reply, and only the prompt’s author and that responder can continue the thread. Press play on Alice’s question.

Alice @alice.bsky.socialPrompt

First-job advice?

0:00 / 0:03

Transcript“What’s the best advice you got in your first year of work?”

reply.parent → at://…/3k6w
Bob @bob.audio.socialReply
0:00 / 0:04

Transcript“Write down why you made a decision, not just what you decided. Six months later you won’t remember.”

02

How do I make one?

The same post three ways: the record the lexicon defines, the REST call your server makes, and the React hook that records audio in the browser.

dev.antiphony.audio.post
{  "$type": "dev.antiphony.audio.post",  "text": "First-job advice?",  "embed": {    "$type": "dev.antiphony.embed.audio",    "audio": {      "$type": "blob",      "ref": {        "$link": "bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku"      },      "mimeType": "audio/mp4",      "size": 672310    },    "durationMs": 42000,    "waveform": [ 12, 28, 45, 60, 75, 90, 85, 60, 40 ]  },  "createdAt": "2026-09-24T18:00:00.000Z"}
03

What happens to the audio?

Apps send audio in. Antiphony stores it, runs whichever processing the app asked for, and serves the records back out.

In
@antiphony/capture-kitRecords in the browser (React)
Your app's backendUploads audio, creates posts over REST
Your connectorsA phone line, for example, run by your app
Antiphony
Cloudflare WorkersHono API
Neon PostgresRecords and indexes
Cloudflare R2Audio, stored by CID
Opt-inDenoise · ElevenLabsTrim · ffmpegTranscript · Whisper, waveform
Out
REST and XRPC/api/v1/* and /xrpc/dev.antiphony.*
WebhooksHMAC-signed, sent as each stage finishes
AppsVox Pop, Bardcast, yours
04

What's Antiphony's job, and what's mine?

Antiphony owns the audio and the facts derived from it. Who your users are and what they see stays in your app.

Antiphony
Your app
Lexicons. dev.antiphony.* records for posts, replies and transcripts.
Accounts. Profiles, sign-in, sessions and OAuth.
REST API. Audio upload, post and reply creation, playback URLs.
Product. UI, feeds, ranking, moderation and community rules.
Processing. Transcription, denoising, trimming, waveforms and mp3 renditions, each opt-in.
Teams and billing. Workspaces, roles, permissions and subscriptions.
Tenancy. Every post is scoped to the app that created it (originAppId).
Connectors. Telephony, broadcast feeds and your own webhooks.
05

Where do I start?

The next reply is yours.