> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.anthropod.in/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.anthropod.in/_mcp/server.

# Retrieve a conversation

GET https://anthropod.in/api/v2/voice-agents/conversations/{conversation_id}

Return one stored record in data by its identifier. This operation does not accept a date range. Full stored analysis and transcription are returned without an include selector. The record follows the existing Voice Agent webhook: conversation_id, conversation_time, native status, transcript text, inbuilt_analytics, meta_analytics, tool calls and transfer/scheduling results when stored. For larger datasets, use [Create export](/v0/api-reference/exports/create-export) to obtain a CSV download link. Each export supports at most 31 days, 100,000 records and 200 MiB (209,715,200 bytes); split longer periods into adjacent windows.

Reference: https://docs.anthropod.in/api-reference/voice-agents/get-voice-conversation

## Authentication

- `Authorization` header (bearer token, required) — Existing private account API key from Developer Hub. Keep it on your backend.

## Request

### Path parameters

- `conversation_id` (string, required) — Identifier returned by the corresponding list operation. Nonempty, at most 255 characters; whitespace-only values and control characters are rejected.

## Response

### 200

Successful response.

- `data` (object, required) — The existing Voice Agent external webhook projection, reconstructed from persisted fields. Internal processing fields are excluded by the same webhook formatter.
  - `api_version` (string, optional) — Existing Voice Agent webhook payload version.
  - `client_id` (string, optional) — Owning client.
  - `agent_id` (string, optional) — Voice Agent identifier.
  - `conversation_id` (string, optional) — Voice conversation identifier.
  - `customer_id` (string, optional, nullable) — Linked customer identifier when stored.
  - `conversation_time` (long, optional, nullable) — Conversation time in Unix epoch seconds.
  - `status` (string, optional) — Native stored status, such as completed, call_initiated, or error. No status renaming is performed.
  - `source_type` (string, optional) — Stored source of the conversation.
  - `conversation_type` (string, optional, nullable) — Stored conversation classification.
  - `transcript` (string, optional) — Original complete transcription text from the Voice Agent webhook.
  - `request_data` (map from string to any, optional) — Original Voice Agent request data.
  - `inbuilt_analytics` (object, optional) — Native Voice Agent analytics modules.
    - `business_insights` (object, optional) — Existing module payload. Parameters remain keyed objects; module-specific outputs retain their original structure. A stored version is retained when present.
      - `version` (integer, optional) — Existing module configuration version, when stored.
      - `analytics` (map from string to object, optional) — Map of configured parameter names to native results.
        - `ans` (any, optional) — Stored answer: string, number, boolean, object, array, or null, according to the configured parameter.
        - `explanation` (any, optional) — Stored explanation, when present; preserved in its original form.
        - `explanation_with_source` (list of map from string to any or map from string to any, optional, nullable) — Stored supporting evidence as an array of evidence objects. When no evidence is available, the stored value may be an empty array, an empty object, or null; the field may also be absent.
        - `subparameters` (map from string to object, optional, nullable) — Nested results keyed by subparameter name. These retain the same ans, explanation, and evidence structure. When there are no nested results, the stored value may be null or an empty object; the field may also be absent.
    - `conversation_summary` (object, optional) — Existing module payload. Parameters remain keyed objects; module-specific outputs retain their original structure. A stored version is retained when present.
      - `version` (integer, optional) — Existing module configuration version, when stored.
      - `analytics` (map from string to any, optional) — Native module results. Business insights and custom-module values are keyed parameter answers; summaries, dispositions, concerns, templates, and QA retain their module-specific structure.
  - `meta_analytics` (map from string to any, optional) — Webhook metadata including duration, disconnect outcome and recording_url where available. Temporary recording links may be null.
  - `tool_calls` (list of map from string to any, optional) — Tool calls in their existing webhook structure.
  - `future_scheduling` (map from string to any, optional) — Stored scheduling results.
  - `call_transfer_details` (object, optional) — Stored call transfer status and details when available.
    - `call_transfer_status` (string, optional, nullable)
    - `call_transfer_details` (map from string to any, optional) — Native stored transfer details.
  - `telephony_provider_call_id` (string, optional, nullable) — Provider call identifier, when available.
  - `crm_update_status` (string, optional, nullable) — Stored result of the CRM update, when available; null when not recorded.
  - `crm_update_payload` (map from string to any, optional) — Stored CRM result payload when available.

## Errors

### 400 Bad Request Error

Bad Request

- `type` (string, required) — Problem type URI.
- `title` (string, required) — Standard HTTP status title.
- `status` (integer, required) — HTTP status code.
- `detail` (string, required) — Description of this occurrence.
- `code` (string, required) — Machine-readable error code.
- `request_id` (string, required) — Reference to use when contacting support.

### 401 Unauthorized Error

Unauthorized

- `type` (string, required) — Problem type URI.
- `title` (string, required) — Standard HTTP status title.
- `status` (integer, required) — HTTP status code.
- `detail` (string, required) — Description of this occurrence.
- `code` (string, required) — Machine-readable error code.
- `request_id` (string, required) — Reference to use when contacting support.

### 404 Not Found Error

Not Found

- `type` (string, required) — Problem type URI.
- `title` (string, required) — Standard HTTP status title.
- `status` (integer, required) — HTTP status code.
- `detail` (string, required) — Description of this occurrence.
- `code` (string, required) — Machine-readable error code.
- `request_id` (string, required) — Reference to use when contacting support.

### 429 Too Many Requests Error

Request allowance exceeded. Retry after the returned Retry-After interval.

- `type` (string, required) — Problem type URI.
- `title` (string, required) — Standard HTTP status title.
- `status` (integer, required) — HTTP status code.
- `detail` (string, required) — Description of this occurrence.
- `code` (string, required) — Machine-readable error code.
- `request_id` (string, required) — Reference to use when contacting support.

### 500 Internal Server Error

Internal Server Error

- `type` (string, required) — Problem type URI.
- `title` (string, required) — Standard HTTP status title.
- `status` (integer, required) — HTTP status code.
- `detail` (string, required) — Description of this occurrence.
- `code` (string, required) — Machine-readable error code.
- `request_id` (string, required) — Reference to use when contacting support.

### 503 Service Unavailable Error

The feature is disabled or a required dependency is temporarily unavailable.

- `type` (string, required) — Problem type URI.
- `title` (string, required) — Standard HTTP status title.
- `status` (integer, required) — HTTP status code.
- `detail` (string, required) — Description of this occurrence.
- `code` (string, required) — Machine-readable error code.
- `request_id` (string, required) — Reference to use when contacting support.

## Examples

**Response**

```json
{
  "data": {
    "api_version": "v2",
    "client_id": "client_123",
    "agent_id": "voice_agent_123",
    "conversation_id": "voice_conversation_123",
    "customer_id": "customer_123",
    "conversation_time": 1788220800,
    "status": "completed",
    "source_type": "phone",
    "conversation_type": "Proper Conversation",
    "transcript": "Customer: Please call me tomorrow.\nAgent: I have noted your request.",
    "request_data": {
      "customer_id": "customer_123"
    },
    "inbuilt_analytics": {
      "business_insights": {
        "version": 2,
        "analytics": {
          "callback_priority": {
            "ans": "High",
            "explanation": "The customer requested a callback tomorrow.",
            "explanation_with_source": [
              {
                "sources": [
                  {
                    "end_timestamp": "00:00:04.500",
                    "segment_id": "S1",
                    "start_timestamp": "00:00:02.000"
                  }
                ],
                "text": "Please call me tomorrow."
              }
            ],
            "subparameters": {
              "callback_requested": {
                "ans": true,
                "explanation": "Customer requested a callback."
              }
            }
          }
        }
      }
    },
    "meta_analytics": {
      "disconnect_reason": "hangup",
      "disconnect_type": "customer",
      "duration": 45,
      "recording_url": null
    },
    "tool_calls": [
      {
        "arguments": {
          "day": "Tomorrow"
        },
        "result": {
          "scheduled": true
        },
        "tool_name": "schedule_callback"
      }
    ],
    "future_scheduling": {
      "scheduled": true
    },
    "call_transfer_details": {
      "call_transfer_status": "No",
      "call_transfer_details": {}
    },
    "telephony_provider_call_id": "provider_call_123"
  }
}
```

**SDK Code**

```python
import requests

url = "https://anthropod.in/api/v2/voice-agents/conversations/voice_conversation_123"

headers = {"Authorization": "Bearer <accountApiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://anthropod.in/api/v2/voice-agents/conversations/voice_conversation_123';
const options = {method: 'GET', headers: {Authorization: 'Bearer <accountApiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://anthropod.in/api/v2/voice-agents/conversations/voice_conversation_123"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <accountApiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://anthropod.in/api/v2/voice-agents/conversations/voice_conversation_123")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <accountApiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://anthropod.in/api/v2/voice-agents/conversations/voice_conversation_123")
  .header("Authorization", "Bearer <accountApiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://anthropod.in/api/v2/voice-agents/conversations/voice_conversation_123', [
  'headers' => [
    'Authorization' => 'Bearer <accountApiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://anthropod.in/api/v2/voice-agents/conversations/voice_conversation_123");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <accountApiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <accountApiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://anthropod.in/api/v2/voice-agents/conversations/voice_conversation_123")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```