Skip to main content
GET
/
v1
/
voice
/
campaigns
/
{campaign_id}
/
failed-numbers
Get Failed Numbers
curl --request GET \
  --url https://api.example.com/v1/voice/campaigns/{campaign_id}/failed-numbers \
  --header 'X-API-Key: <x-api-key>'
{
  "success": true,
  "campaign_id": "<string>",
  "count": 123,
  "failed_numbers": [
    {
      "phone_number": "<string>",
      "failure_reason": "<string>",
      "call_timestamp": "<string>",
      "call_id": "<string>"
    }
  ],
  "powered_by": "<string>"
}

Documentation Index

Fetch the complete documentation index at: https://docs.teli.ai/llms.txt

Use this file to discover all available pages before exploring further.

Description

Returns phone numbers where calls failed, went unanswered, or hit voicemail. Useful for retry campaigns or manual follow-up.

Authentication

X-API-Key
string
required
Your Teli API key

Path Parameters

campaign_id
string
required
The campaign identifier

Query Parameters

format
string
default:"simple"
Response format: simple (phone list only) or detailed (includes failure reasons)
include_voicemail
boolean
default:"true"
Include voicemail as failed
include_not_called
boolean
default:"false"
Include contacts not yet called

Response Fields

success
boolean
Whether the request was successful
campaign_id
string
Campaign identifier
count
integer
Number of failed numbers
failed_numbers
array
Array of phone numbers (simple format) or failure objects (detailed format)
powered_by
string
Always returns “Teli”

Example Request (Simple)

cURL
curl -X GET "https://api.teli.ai/v1/voice/campaigns/voice_campaign_abc123/failed-numbers" \
  -H "X-API-Key: YOUR_API_KEY"

Example Response (Simple)

200
{
  "success": true,
  "campaign_id": "voice_campaign_abc123",
  "failed_numbers": [
    "+15559876543",
    "+15551112222"
  ],
  "count": 2,
  "powered_by": "Teli"
}

Example Request (Detailed)

cURL
curl -X GET "https://api.teli.ai/v1/voice/campaigns/voice_campaign_abc123/failed-numbers?format=detailed" \
  -H "X-API-Key: YOUR_API_KEY"

Example Response (Detailed)

200
{
  "success": true,
  "campaign_id": "voice_campaign_abc123",
  "failed_numbers": [
    {
      "phone_number": "+15559876543",
      "failure_reason": "no_answer",
      "call_timestamp": "2026-01-28T10:30:00.000000",
      "call_id": "call_abc123"
    },
    {
      "phone_number": "+15551112222",
      "failure_reason": "voicemail",
      "call_timestamp": "2026-01-28T10:35:00.000000",
      "call_id": "call_def456"
    }
  ],
  "count": 2,
  "powered_by": "Teli"
}

Failure Reasons

ReasonDescription
no_answerCall was not answered within timeout
busyLine was busy
voicemailCall went to voicemail
call_declinedRecipient declined the call
invalid_numberPhone number is invalid or unreachable
not_calledContact has not been called yet (only if include_not_called=true)

Use Cases

Retry Campaign

Use the simple format to create a new campaign with failed numbers:
// Get failed numbers
const response = await fetch(
  'https://api.teli.ai/v1/voice/campaigns/voice_campaign_abc123/failed-numbers',
  { headers: { 'X-API-Key': 'YOUR_KEY' } }
);
const data = await response.json();

// Create retry campaign
const retryCampaign = await fetch(
  'https://api.teli.ai/v1/voice/campaigns',
  {
    method: 'POST',
    headers: { 'X-API-Key': 'YOUR_KEY', 'Content-Type': 'application/json' },
    body: JSON.stringify({
      voice_agent_id: 'agent_abc',
      agent_outbound_number: '+15551234567',
      leads: data.failed_numbers.map(phone => ({ phone_number: phone }))
    })
  }
);