Call-and-response audio on the AT Protocol
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.
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.
First-job advice?
Transcript“What’s the best advice you got in your first year of work?”
Transcript“Write down why you made a decision, not just what you decided. Six months later you won’t remember.”
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.
{ "$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"}// Your server creates the post on behalf of the user who recorded it.const res = await fetch("https://api.antiphony.dev/api/v1/posts", { method: "POST", headers: { "Authorization": `Bearer ${serviceToken}`, "X-Antiphony-Acting-Actor": "did:plc:alice12345", "Content-Type": "application/json" }, body: JSON.stringify({ text: "First-job advice?", embed: { $type: "dev.antiphony.embed.audio", audio, durationMs: 42000, waveform }, processing: { transcribe: true } })});const { data } = await res.json();import { useAudioRecorder } from '@antiphony/capture-kit'; export function VoicePrompt() { const { status, start, stop } = useAudioRecorder(); return ( <button onClick={status === 'recording' ? stop : start}> {status === 'recording' ? 'Stop' : 'Record'} </button> );}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.
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.