Skip to main content
GET
/
v1
/
amd
/
calls
/
{call_id}
Get an AMD decision
curl --request GET \
  --url https://api.pyai.com/v1/amd/calls/{call_id} \
  --header 'Authorization: Bearer <token>'
{
  "object": "amd.call",
  "call_id": "<string>",
  "session_label": "<string>",
  "answered_by_twilio": "<string>",
  "confidence": 0.5,
  "decision_ms": 123,
  "created_at": 123,
  "reason": "<string>",
  "aggressiveness": 123,
  "started_at": 123,
  "meta": {},
  "error": "<string>"
}

Authorizations

Authorization
string
header
required

Use Authorization: Bearer pyai_live_... (or pyai_test_...).

Path Parameters

call_id
string
required

Response

AMD decision detail

object
string
Example:

"amd.call"

call_id
string
session_label
string | null

The opaque tag passed on the connect URL / TwiML, if any.

status
enum<string>
Available options:
completed,
failed
answered_by
enum<string>

PyAI's richer answered-by vocabulary. screening = an iPhone/Google call-screening assistant; sit_invalid = a dead/disconnected number.

Available options:
human,
voicemail,
live_voicemail,
screening,
ivr,
human_gatekeeper,
sit_invalid,
fax,
silence,
unknown
answered_by_twilio
string | null

Twilio's exact AnsweredBy enum (human | machine_start | machine_end_beep | machine_end_silence | machine_end_other | fax | unknown), so a Twilio drop-in keeps its routing logic unchanged.

confidence
number | null
Required range: 0 <= x <= 1
decision_ms
number | null

Latency from answer to decision, in ms.

created_at
integer

Unix ms when the decision was written.

reason
string | null

Human-readable evidence, e.g. "machine phrase: 'please leave a message' at 1.2s".

aggressiveness
number | null

Operating point used for this call.

started_at
integer | null

Unix ms when the call was answered.

meta
object
error
string | null

Present when status is failed.