> ## Documentation Index
> Fetch the complete documentation index at: https://developers.telnyx.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Voice

> Index your voice call transcriptions in a Search collection, and enable transcript persistence on your SIP connections.

The `voice` source indexes your account's persisted voice call transcriptions. Calls become searchable minutes after they end -- there is nothing to sync.

## Attach the Source

```bash theme={null}
curl -X POST https://api.telnyx.com/v2/ai/collections/{uuid}/sources \
  -H "Authorization: Bearer $TELNYX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "source_type": "voice" }'
```

The source indexes every persisted voice transcription on the account. A collection over an account with no persisted transcriptions returns empty results -- enable persistence first.

## Enable Voice Transcript Persistence

Voice transcripts are persisted per SIP connection. Set `conversation_persistence` to `true` on each connection whose calls you want transcribed, stored, and indexed:

```bash theme={null}
curl -X PATCH https://api.telnyx.com/v2/credential_connections/{id} \
  -H "Authorization: Bearer $TELNYX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "conversation_persistence": true }'
```

The same field exists on all supported connection types:

| Connection type        | Endpoint                                |
| ---------------------- | --------------------------------------- |
| Credential connections | `PATCH /v2/credential_connections/{id}` |
| IP connections         | `PATCH /v2/ip_connections/{id}`         |
| FQDN connections       | `PATCH /v2/fqdn_connections/{id}`       |

Verify with a `GET` on the connection -- the response includes `conversation_persistence`. Set it to `false` to stop persisting new calls.

From then on, every call handled by that connection is transcribed and indexed automatically. Persisted records include 30 days of indexed retention -- see [Pricing](/docs/inference/embedding-rag/pricing) for extended retention.

## What a Result Looks Like

Voice chunks carry `record_type: "voice"` plus the call's identifiers and timestamps:

```json theme={null}
{
  "id": "e30570b6-68d5-11f1-838c-02420a0ddb20:0",
  "record_id": "e30570b6-68d5-11f1-838c-02420a0ddb20",
  "chunk_index": 0,
  "chunk_total": 1,
  "text": "...The refund of $200 has been deposited back in your account...",
  "score": 0.904,
  "record_type": "voice",
  "record_created_at": "2026-06-15T16:18:49.981698+00:00",
  "ingested_at": "2026-06-15T16:20:12.170251+00:00",
  "metadata": { "source": "Trunking" }
}
```

Narrow searches to calls with `sources=voice` or filter on record fields -- see [Search](/docs/ai-search/searching).
