A real-time voicemail detection API for any dialer or voice platform. Stream the first seconds of the callee's audio over a WebSocket and get back HUMAN or MACHINE with a reason, before an agent or a bot says a word.
The API is built for the moment of answer. There is no upload, no job id and no callback: the client opens a connection when the call is answered, streams audio as it arrives, and reads a single JSON verdict. Most integrations stop streaming the moment the verdict arrives, about two seconds in.
ws://app.vmhunter.com:2701. One connection per call.{"config": {"vid": "<your call id>", "api_key": "<key>", "sample_rate": 8000, "bytes_per_sample": 2}}{"AMDSTATUS": "MACHINE", "AMDCAUSE": "MACHINE_BEEP"}. The server closes the connection.import json, time
from websocket import create_connection
ws = create_connection("ws://app.vmhunter.com:2701", timeout=10)
ws.send(json.dumps({"config": {"vid": "lead-1", "api_key": API_KEY,
"sample_rate": 8000, "bytes_per_sample": 2}}))
for chunk in audio_frames(): # 320 bytes = 20 ms of 8 kHz s16le
ws.send_binary(chunk)
print(json.loads(ws.recv())) # {"AMDSTATUS": ..., "AMDCAUSE": ...}The full reference, with every AMDCAUSE value and the timing rules, is at /docs/api. Minimal Python and Node.js clients are in vmhunter-examples.
| AMDSTATUS | AMDCAUSE | Meaning |
|---|---|---|
| HUMAN | HUMAN | A live person: a greeting followed by a pause, a question, or a live-person phrase |
| MACHINE | MACHINE | Voicemail or IVR wording, or a greeting that ran on without pausing |
| MACHINE | MACHINE_BEEP / MACHINE_STATIC | A voicemail beep; only noise on the line |
| MACHINE | DISCONNECT | SIT tones: the number is disconnected or changed |
| MACHINE | INITIALSILENCE | No speech in the window, including calls that arrive with no audio |
| MACHINE or CALLGUARD | CALLGUARD_PHRASE:<phrase> | Call screening (iPhone, Google, call blockers); the matched phrase follows |
| FAILED | AUTH_FAILED, LIMIT_REACHED, ... | Detection did not run; not billed |
Plans are priced per call analysed and set the calls per second and concurrent connections you can open. The free plan includes 5,000 calls a month with no card; paid plans start at $100 a month. Details on the pricing page.
The free plan includes 5,000 calls a month. The Python example above runs in under a minute.