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

GET https://anthropod.in/api/v2/conversation-analytics/customers/{customer_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 contains the current customer_analytics, meta_analytics and native timeline object. It preserves the customer portion of the analytics webhook; it does not reconstruct a historical profile. 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/conversation-analytics/get-customer

## Authentication

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

## Request

### Path parameters

- `customer_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) — Current stored customer profile and the native customer analytics/timeline from the analytics webhook. It is not a historical snapshot.
  - `client_id` (string, optional) — Owning client.
  - `service_id` (string, optional) — Owning service.
  - `customer_id` (string, optional) — Customer identifier in this service.
  - `customer_analytics` (object, optional) — Current accumulated customer analytics. Native customer modules are preserved; no conversation-module wrapper or new catalog version is added.
    - `business_insights` (map from string to object, optional) — Native customer business-insight module 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` (map from string to object, optional) — Native customer custom-module 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.
    - `customer_summary` (map from string to any, optional) — Native customer summary and evidence.
    - `conversation_dispositions` (map from string to any, optional) — Native current dispositions.
    - `lead_quality` (map from string to any, optional) — Native customer lead-quality results.
    - `concerns_and_queries` (map from string to any, optional) — Native accumulated concerns and queries.
    - `templates` (map from string to any, optional) — Native customer template results.
  - `meta_analytics` (map from string to any, optional) — Stored customer metadata from the current accumulated profile.
  - `timeline` (map from string to map from string to any, optional) — The same timeline object returned with customer analytics in the analytics webhook, keyed by its stored entry IDs.

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

**Response**

```json
{
  "data": {
    "client_id": "client_123",
    "service_id": "service_123",
    "customer_id": "customer_123",
    "customer_analytics": {
      "business_insights": {
        "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.",
              "subparameters": null
            }
          }
        }
      },
      "custom_module": {
        "callback_required": {
          "ans": true
        }
      },
      "customer_summary": {
        "customer_summary_with_source": [
          {
            "sources": [
              {
                "id": "conversation_123"
              }
            ],
            "text": "Customer requested a callback."
          }
        ]
      }
    },
    "meta_analytics": {
      "crm_lead_stage": "Follow-up",
      "lead_source": "Website",
      "primary_language": "English"
    },
    "timeline": {
      "conversation_123": {
        "call_time": 1788220800,
        "id": "conversation_123",
        "record_type": "call"
      }
    }
  }
}
```

**SDK Code**

```python
import requests

url = "https://anthropod.in/api/v2/conversation-analytics/customers/customer_123"

querystring = {"service_id":"service_123"}

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

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

print(response.json())
```

```javascript
const url = 'https://anthropod.in/api/v2/conversation-analytics/customers/customer_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
package main

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

func main() {

	url := "https://anthropod.in/api/v2/conversation-analytics/customers/customer_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
require 'uri'
require 'net/http'

url = URI("https://anthropod.in/api/v2/conversation-analytics/customers/customer_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
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://anthropod.in/api/v2/conversation-analytics/customers/customer_123?service_id=service_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/conversation-analytics/customers/customer_123?service_id=service_123', [
  'headers' => [
    'Authorization' => 'Bearer <accountApiKey>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://anthropod.in/api/v2/conversation-analytics/customers/customer_123?service_id=service_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/conversation-analytics/customers/customer_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()
```