Skip to main content
GET
Get outbound call status
Retrieve the current status of an outbound call, using the call_sid returned when the call was placed. Poll this endpoint until the status reaches a terminal value — success or failure.

Call statuses

When status is failure, the response also carries a failure_code — a closed set of machine-readable causes you can branch on. The reason field is free text with no stability contract, so classify on failure_code rather than parsing it.

Failure codes

Six failures happen before the destination carrier replies at all: The rest are mapped from the SIP response the call ended on:
Members may be added to failure_code without a major version bump. Treat any value you do not recognise as unknown rather than failing on it.
rejected and declined are deliberately separate: a 403 is your trunk refusing the caller ID you presented — a configuration error that will fail identically on every retry — while a 603 is a person hanging up. The lookup timeouts, by contrast, are transient; the same call placed again later may well connect.

SIP response detail

Failures that ended on a SIP response also carry a sip object with the carrier’s reply. It is absent for failures that never reached one, such as status_lookup_timeout.
sip.reason is the carrier’s own reason phrase. It is unvalidated and not under PolyAI’s control, so escape it before displaying it or writing it anywhere it could be interpreted as markup.
Call statuses are retained for roughly 2 hours after the call is placed. After that the call_sid is no longer queryable and the endpoint returns 404.

Authorizations

X-API-Key
string
header
required

Path Parameters

trunkId
string
required

The SIP Trunk's friendly ID (e.g. tr-...).

callSid
string
required

The identifier returned when the call was placed.

Response

The call's current status.

The current status of an outbound call.

status
enum<string>
required

The call's current status.

Available options:
queued,
calling,
success,
failure
Example:

"failure"

reason
string

Human-readable detail for the status. Free text, with no stability contract — classify on failure_code rather than parsing this.

Example:

"call failed: SIP 403 Caller ID is unauthorized"

failure_code
enum<string>

Why the call failed, set whenever status is failure. Members may be added without a major version bump, so treat an unrecognised value as unknown.

Available options:
queue_timeout,
originate_timeout,
status_lookup_timeout,
status_lookup_failed,
retry_failed,
max_retries_exceeded,
busy,
no_answer,
unavailable,
invalid_number,
declined,
rejected,
carrier_error,
unknown
Example:

"rejected"

sip
object

The SIP response the call attempt ended on. Present only when the carrier replied; a call that failed before reaching one has none.

Last modified on September 22, 2026