Skip to content
Patch AMD

Answering machine detection API

Know who picked up.
From the words, not the beep.

Stream the first seconds of an outbound call and get one decision: a person, voicemail, a phone menu or a dead line. Connect people in a blink; drop recordings before they finish.

Accuracy
96.9%
Recordings connected
0
Median to connect
0.15 s

OpenAMD, English subset, 128 clips. Method and results.

// Your Twilio voice webhook for the outbound call (runs on answer)
app.post('/twilio/answered', async (req, res) => {
  const stream = await fetch('https://api.patchamd.com/v1/streams', {
    method: 'POST',
    headers: { authorization: `Bearer ${process.env.PATCH_AMD_KEY}`, 'content-type': 'application/json' },
    body: JSON.stringify({ webhook_url: 'https://you.example/amd', metadata: { lead: req.query.lead } }),
  }).then(r => r.json());

  res.type('text/xml').send(`<Response>
  <Start>
    <Stream url="${stream.base_url}" track="inbound_track">
      <Parameter name="token" value="${stream.token}"/>
    </Stream>
  </Start>
  <Pause length="20"/>
</Response>`);
});

How it works

  1. 1. Stream the answer

    Point Twilio <Stream>, Telnyx streaming_start or your own media relay at one WebSocket URL when the call is answered.

  2. 2. It understands what is said

    A real-time pipeline listens to the first seconds of the call, understands what is said, and applies a conservative decision policy tuned to never connect a rep to a recording.

  3. 3. One decision back

    human, voicemail, ivr, unavailable, silence or not_sure — on the socket and as a signed amd.decided webhook. Then the stream closes.

Built to protect both sides of the call

Two mistakes matter in outbound calling: a rep connected to a voicemail, and a real prospect hung up on. Patch AMD is tuned against both.

  • Never connects a rep to “Hi, this is Sandy…” mid-sentence: a person is only declared once they stop and wait.
  • Recordings are dropped as soon as the words prove it — usually before the greeting ends.
  • Carrier-neutral: Twilio, Telnyx or raw mu-law, A-law and PCM.
  • Fails open: if anything on our side breaks you get not_sure, free of charge.
  • No audio or transcripts stored. Logs hold timings only.
amd.decided webhook
// POST https://you.example/amd  (verify webhook-signature first)
{
  "type": "amd.decided",
  "timestamp": "2026-11-10T19:43:03.114Z",
  "data": {
    "detection_id": "det_4f9Qm2LxV7cT1bZr8KpA",
    "result": "human",          // human | voicemail | ivr | unavailable | silence | not_sure
    "reason": "person_waiting",
    "at_ms": 1620,               // from answer to decision
    "heard": "Hello? Who's this?",
    "carrier": "twilio",
    "call_id": "CA4c1f…",
    "metadata": { "lead": "42" }
  }
}

Benchmarked in the open

OpenAMD, English subset, 128 clips, replayed in real time through the production detector.

Full results
ModelAccuracy
Patch AMD96.9%
CNN6-GBM (dataset’s best)96.1%
CNN6-GBM-balanced93.0%
wav2vec_finetune92.2%

Baselines are the dataset’s own published predictions on the same files. Dataset: OpenAMD (Zenodo).

Simple pricing

Pay per answered call. Nothing for unanswered calls or our failures.

See pricing

$0.007

per answered detection

250

free every month

$0.004

at volume

Questions

What is Patch AMD?

An answering machine detection (AMD) API for outbound calls. You stream the callee’s audio from the moment the call is answered; a real-time pipeline understands what is said, and Patch AMD returns one decision: human, voicemail, ivr, unavailable, silence or not_sure.

Which carriers does it work with?

Any that can stream call audio over a WebSocket. Twilio Media Streams and Telnyx media streaming work out of the box; anything else can send raw mu-law, A-law or 16-bit PCM frames.

How fast is the decision?

On the OpenAMD English benchmark, people were connected a median 0.15 seconds after they stopped speaking (90th percentile about 1 second), and every recording was identified before it finished playing, a median 3.4 seconds after pickup.

How accurate is it?

On the OpenAMD dataset’s English subset (128 clips: 85 people, 43 recordings), Patch AMD scored 96.9% with no recordings connected to a rep. The dataset’s best published model scored 96.1% on the same clips.

What does it cost?

$0.007 per answered detection, with volume tiers down to $0.004 and the first 250 detections each month free. Calls that are never answered, and detections that fail on our side, are not charged.

Do you store call audio or transcripts?

No. Audio is processed in real time and discarded; the words heard are sent to you in the decision event and webhook and never written to our database or logs. We keep the decision, its timing and your metadata for usage and billing.

What happens if the detector fails?

It fails open: the decision is not_sure with reason detector_failed, which you should treat as a person, and it is not billed.

Does it work in languages other than English?

Patch AMD is tuned and benchmarked for English. Other languages are available on request; they have not been benchmarked yet.

Start with 250 free detections a month

No card needed. Create a key and stream your first call in minutes.

Get an API key