> 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/conversation-analytics/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 analytics webhook format: audio_to_text.transcript for calls or chat_transcription.transcript for chats, meta_analytics and native conversation_analytics modules. Customer analytics and customer timeline are excluded. 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 100 MB; split longer periods into adjacent windows.

Reference: https://docs.anthropod.in/api-reference/conversation-analytics/get-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.

### Query parameters

- `service_id` (string, required) — Required authorized service. Client identity is derived from the API key. Nonempty, at most 255 characters; whitespace-only values and control characters are rejected.

## Response

### 200

Successful response.

- `data` (object, required) — Native analytics webhook payload, excluding customer_analytics, timeline, usage, client_system_parameters, processing_id and ledger_entry. Configured modules and missing values are preserved as stored.
  - `api_version` (string, optional) — Existing analytics payload version.
  - `id` (string, optional) — Conversation identifier.
  - `anthro_id` (string, optional) — Stored analysis identifier.
  - `timestamp` (long, optional) — Stored response timestamp in epoch seconds; the interaction time is in request_data.
  - `request_data` (map from string to any, optional) — Original client request fields returned by the analytics webhook, including service_id, customer_id and conversation_time (or call_time for older records). Internal usage and client system parameters are excluded.
  - `conversation_type` (string, optional, nullable) — Stored conversation classification.
  - `conversation_type_reason` (string, optional, nullable) — Stored classification explanation.
  - `meta_analytics` (map from string to any, optional) — Native call/chat metadata. Calls can include audio duration, talk time, language and CRM fields. Chats can include first_response_time, resolution_time, and message_count. Fields depend on available source data.
  - `audio_to_text` (object, optional) — Call transcription when stored; no role/text conversion is performed.
    - `transcript` (string, optional) — The existing complete call transcription text.
  - `chat_transcription` (object, optional) — Chat transcription when stored.
    - `transcript` (string, optional) — The existing complete chat transcription text.
  - `conversation_analytics` (object, optional) — Only the stored conversation modules. Customer analytics and customer timeline are excluded.
    - `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.
    - `custom_module` (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.
    - `lead_quality` (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.
    - `agent_feedback` (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` (object, optional) — Native QA parameter scores and aggregate results.
        - `parameters` (map from string to object, optional) — QA parameter scores and explanations.
          - `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.
        - `overall` (object, optional) — Native aggregate score, positive/negative points, fatal status, and trigger parameters when available.
          - `output` (object, optional)
            - `ans` (integer, optional, nullable) — Native overall score from 0 to 100.
          - `fatal` (string, optional, nullable) — Stored fatal flag, normally Yes or No.
          - `fatal_trigger_parameters` (list of string, optional)
    - `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.
    - `conversation_dispositions` (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.
    - `concerns_and_queries` (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.
    - `templates` (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.
  - `error` (string, optional) — Stored processing error when processing failed.
  - `error_type` (string, optional) — Stored processing error category.

## 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.

### 403 Forbidden Error

Forbidden

- `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

### Retrieved

**Response**

```json
{
  "data": {
    "api_version": "v2",
    "id": "conversation_123",
    "anthro_id": "analysis_123",
    "timestamp": 1788220890,
    "request_data": {
      "call_direction": "Outbound",
      "conversation_time": 1788220800,
      "customer_id": "customer_123",
      "employee_id": "agent_123",
      "service_id": "service_123"
    },
    "conversation_type": "Proper Conversation",
    "conversation_type_reason": "The customer discussed a follow-up.",
    "meta_analytics": {
      "agent_talk_duration": 20,
      "audio_duration": 45,
      "customer_talk_duration": 18,
      "lead_source": "Website",
      "primary_language": "English"
    },
    "audio_to_text": {
      "transcript": "Customer: Please call me tomorrow.\nAgent: I have noted your request."
    },
    "conversation_analytics": {
      "business_insights": {
        "version": 3,
        "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."
              }
            }
          },
          "interested_locations": {
            "ans": [
              "Delhi",
              "Mumbai"
            ],
            "explanation_with_source": {}
          }
        }
      },
      "custom_module": {
        "version": 2,
        "analytics": {
          "callback_required": {
            "ans": true,
            "subparameters": {
              "preferred_day": {
                "ans": "Tomorrow"
              }
            }
          }
        }
      },
      "agent_feedback": {
        "version": 4,
        "analytics": {
          "parameters": {
            "greeting": {
              "ans": 5,
              "explanation": "Agent greeted the customer."
            }
          },
          "overall": {
            "output": {
              "ans": 92
            },
            "fatal": "No",
            "fatal_trigger_parameters": []
          }
        }
      },
      "conversation_summary": {
        "version": 1,
        "analytics": {
          "call_summary": "Customer requested a callback tomorrow.",
          "call_summary_with_source": [
            {
              "sources": [
                {
                  "segment_id": "S1"
                }
              ],
              "text": "Callback requested."
            }
          ]
        }
      }
    }
  }
}
```

**SDK Code**

```python Retrieved
import requests

url = "https://anthropod.in/api/v2/conversation-analytics/conversations/conversation_123"

querystring = {"service_id":"service_123"}

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

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

print(response.json())
```

```javascript Retrieved
const url = 'https://anthropod.in/api/v2/conversation-analytics/conversations/conversation_123?service_id=service_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 Retrieved
package main

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

func main() {

	url := "https://anthropod.in/api/v2/conversation-analytics/conversations/conversation_123?service_id=service_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 Retrieved
require 'uri'
require 'net/http'

url = URI("https://anthropod.in/api/v2/conversation-analytics/conversations/conversation_123?service_id=service_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 Retrieved
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://anthropod.in/api/v2/conversation-analytics/conversations/conversation_123?service_id=service_123")
  .header("Authorization", "Bearer <accountApiKey>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://anthropod.in/api/v2/conversation-analytics/conversations/conversation_123?service_id=service_123', [
  'headers' => [
    'Authorization' => 'Bearer <accountApiKey>',
  ],
]);

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

```csharp Retrieved
using RestSharp;

var client = new RestClient("https://anthropod.in/api/v2/conversation-analytics/conversations/conversation_123?service_id=service_123");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <accountApiKey>");
IRestResponse response = client.Execute(request);
```

```swift Retrieved
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://anthropod.in/api/v2/conversation-analytics/conversations/conversation_123?service_id=service_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()
```

### Chat

**Response**

```json
{
  "data": {
    "api_version": "v2",
    "id": "chat_123",
    "anthro_id": "chat_analysis_123",
    "timestamp": 1788220890,
    "request_data": {
      "call_direction": "Outbound",
      "conversation_time": 1788220800,
      "customer_id": "customer_123",
      "employee_id": "agent_123",
      "service_id": "service_123"
    },
    "conversation_type": "Proper Conversation",
    "conversation_type_reason": "The customer discussed a follow-up.",
    "meta_analytics": {
      "first_response_time": 8,
      "message_count": {
        "total": {
          "normal": 2
        }
      },
      "resolution_time": 60
    },
    "chat_transcription": {
      "transcript": "Customer: Please send the details.\nAgent: I will send them now."
    },
    "conversation_analytics": {
      "business_insights": {
        "version": 3,
        "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."
              }
            }
          },
          "interested_locations": {
            "ans": [
              "Delhi",
              "Mumbai"
            ],
            "explanation_with_source": {}
          }
        }
      },
      "custom_module": {
        "version": 2,
        "analytics": {
          "callback_required": {
            "ans": true,
            "subparameters": {
              "preferred_day": {
                "ans": "Tomorrow"
              }
            }
          }
        }
      },
      "agent_feedback": {
        "version": 4,
        "analytics": {
          "parameters": {
            "greeting": {
              "ans": 5,
              "explanation": "Agent greeted the customer."
            }
          },
          "overall": {
            "output": {
              "ans": 92
            },
            "fatal": "No",
            "fatal_trigger_parameters": []
          }
        }
      },
      "conversation_summary": {
        "version": 1,
        "analytics": {
          "call_summary": "Customer requested a callback tomorrow.",
          "call_summary_with_source": [
            {
              "sources": [
                {
                  "segment_id": "S1"
                }
              ],
              "text": "Callback requested."
            }
          ]
        }
      }
    }
  }
}
```

**SDK Code**

```python Chat
import requests

url = "https://anthropod.in/api/v2/conversation-analytics/conversations/chat_123"

querystring = {"service_id":"service_123"}

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

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

print(response.json())
```

```javascript Chat
const url = 'https://anthropod.in/api/v2/conversation-analytics/conversations/chat_123?service_id=service_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 Chat
package main

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

func main() {

	url := "https://anthropod.in/api/v2/conversation-analytics/conversations/chat_123?service_id=service_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 Chat
require 'uri'
require 'net/http'

url = URI("https://anthropod.in/api/v2/conversation-analytics/conversations/chat_123?service_id=service_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 Chat
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://anthropod.in/api/v2/conversation-analytics/conversations/chat_123?service_id=service_123")
  .header("Authorization", "Bearer <accountApiKey>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://anthropod.in/api/v2/conversation-analytics/conversations/chat_123?service_id=service_123', [
  'headers' => [
    'Authorization' => 'Bearer <accountApiKey>',
  ],
]);

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

```csharp Chat
using RestSharp;

var client = new RestClient("https://anthropod.in/api/v2/conversation-analytics/conversations/chat_123?service_id=service_123");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <accountApiKey>");
IRestResponse response = client.Execute(request);
```

```swift Chat
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://anthropod.in/api/v2/conversation-analytics/conversations/chat_123?service_id=service_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()
```