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

# Create an export

POST https://anthropod.in/api/v2/exports
Content-Type: application/json

Create an asynchronous CSV download using the same column selection and flattening as dashboard downloads. Supply resource and filters; format defaults to csv and parameters defaults to all supported sections. The JSON response contains job status; poll Retrieve export for download_url when completed. Exports support a maximum 31-day window, 100,000 records and 100 MB. Five jobs may be active per key. Files remain available for seven days; links last at most ten minutes. Only the creating key can retrieve the job.

Reference: https://docs.anthropod.in/api-reference/exports/create-export

## Authentication

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

## Request

### Body (application/json)

This endpoint expects an object.

- `object`
  - `resource`: `conversations` (conversations)
    - `filters` (object, required)
      - `service_id` (string, required) — Authorized service.
      - `start_time` (long, required) — Inclusive start in Unix epoch seconds. Must precede end_time; maximum window is 31 days. Milliseconds are invalid.
      - `end_time` (long, required) — Exclusive end in Unix epoch seconds. Maximum window is 31 days. Milliseconds are invalid.
      - `time_field` (enum, optional, default: conversation_time) — Timestamp used for filtering and ordering. Only conversation_time is currently supported for this resource.
        - Allowed values: `conversation_time`
      - `channel` (enum, optional) — Restrict to calls or chats. Omit to include both channels.
        - Allowed values: `call`, `chat`
      - `customer_id` (string, optional) — Explicit linked customer ID.
      - `analysis_status` (enum, optional) — Analysis status based on available results and final classification.
        - Allowed values: `completed`, `failed`
      - `filter` (object, optional) — Same structured filter.and conditions used on the dashboard. Conditions are ANDed; values within in are ORed. Maximum encoded filter size: 16 KB. Unsupported fields/operators and unknown configured parameters return 400.
        - `and` (list of object, required) — Conditions that must all match. Supply between 1 and 50 conditions.
          - `field` (string, required) — Standard fields: audio_duration, campaign_batch_id, campaign_id, concern_category, concern_sub_category, conversation_direction, conversation_disposition, conversation_id, conversation_potential, conversation_sub_disposition, conversation_type, conversation_type_reason, crm_lead_stage, crm_lead_sub_stage, crm_location, customer_id, customer_phone_number, disposition, employee_id, fatal, first_proper_conversation, lead_source, lead_sub_source, needs_review, open_concerns, overall_score, primary_language, query_category, query_sub_category, secondary_languages, subdisposition, tag, tag2, tag3, team_name. When module is supplied, use the configured parameter name instead.
          - `operator` (enum, required) — eq compares one value; in matches any of 1–50 strings; between uses numeric lower/upper. between is supported for module parameters, overall_score and audio_duration. See field-specific constraints below.
            - Allowed values: `eq`, `in`, `between`
          - `value` (any, required) — eq: nonempty string (1–255 characters). in: 1–50 such strings. between: object with numeric lower and/or upper, lower \<= upper. For overall\_score eq use a one-number array. secondary\_languages supports in only. open\_concerns and first\_proper\_conversation: eq Yes/No; needs\_review: eq Yes; interactions: eq 1, 2-3, 4-5, or More than 5. audio\_duration eq/in uses the dashboard duration presets.
          - `module` (enum, optional) — Optional analytics module; field must resolve to a configured parameter.
            - Allowed values: `business_insights`, `custom_module`, `agent_feedback`
    - `format` (enum, optional, default: csv) — Exports are CSV files.
      - Allowed values: `csv`
    - `parameters` (list of enum, optional) — Existing dashboard download sections to include. Defaults to all supported sections. Must include Meta Data. Columns and flattening match the dashboard download.
      - Allowed values: `Agent Feedback`, `Business Insights`, `Concerns and Queries`, `Conversation Dispositions`, `Custom Module`, `Explanation`, `Lead Quality`, `Meta Data`, `Subparameters`, `Summary`, `Templates`, `Transcript`
  - `resource`: `customers` (customers)
    - `filters` (object, required)
      - `service_id` (string, required) — Authorized service.
      - `start_time` (long, required) — Inclusive start in Unix epoch seconds. Must precede end_time; maximum window is 31 days. Milliseconds are invalid.
      - `end_time` (long, required) — Exclusive end in Unix epoch seconds. Maximum window is 31 days. Milliseconds are invalid.
      - `time_field` (enum, optional, default: last_interaction_at) — Timestamp used for filtering and ordering. Only last_interaction_at is currently supported for this resource.
        - Allowed values: `last_interaction_at`
      - `filter` (object, optional) — Same structured filter.and conditions used on the dashboard. Conditions are ANDed; values within in are ORed. Maximum encoded filter size: 16 KB. Unsupported fields/operators and unknown configured parameters return 400.
        - `and` (list of object, required) — Conditions that must all match. Supply between 1 and 50 conditions.
          - `field` (string, required) — Standard fields: campaign_id, concern_category, concern_sub_category, crm_lead_stage, crm_lead_sub_stage, crm_location, customer_disposition, customer_id, customer_phone_number, customer_potential, customer_sub_disposition, disposition, employee_id, interactions, lead_source, lead_sub_source, open_concerns, primary_language, query_category, query_sub_category, secondary_languages, subdisposition, tag, tag2, tag3, team_name. When module is supplied, use the configured parameter name instead.
          - `operator` (enum, required) — eq compares one value; in matches any of 1–50 strings; between uses numeric lower/upper. between is supported for module parameters. See field-specific constraints below.
            - Allowed values: `eq`, `in`, `between`
          - `value` (any, required) — eq: nonempty string (1–255 characters). in: 1–50 such strings. between: object with finite numeric lower and/or upper, lower \<= upper, for a configured module parameter. secondary\_languages supports in only. open\_concerns supports eq Yes/No. interactions supports eq with 1, 2-3, 4-5, or More than 5.
          - `module` (enum, optional) — Optional analytics module; field must resolve to a configured parameter.
            - Allowed values: `business_insights`, `custom_module`
    - `format` (enum, optional, default: csv) — Exports are CSV files.
      - Allowed values: `csv`
    - `parameters` (list of enum, optional) — Existing dashboard download sections to include. Defaults to all supported sections. Must include Meta Data. Columns and flattening match the dashboard download.
      - Allowed values: `Business Insights`, `Concerns and Queries`, `Conversation Dispositions`, `Custom Module`, `Explanation`, `Lead Quality`, `Meta Data`, `Subparameters`, `Summary`, `Templates`, `Timeline`
  - `resource`: `voice_conversations` (voice_conversations)
    - `filters` (object, required)
      - `start_time` (long, required) — Inclusive start in Unix epoch seconds. Must precede end_time; maximum window is 31 days. Milliseconds are invalid.
      - `end_time` (long, required) — Exclusive end in Unix epoch seconds. Maximum window is 31 days. Milliseconds are invalid.
      - `time_field` (enum, optional, default: conversation_time) — Conversation time used for filtering. Only conversation_time is supported.
        - Allowed values: `conversation_time`
      - `agent_id` (string, optional) — Optional authorized agent.
      - `status` (enum, optional) — Native persisted status, matching the Voice Agent dashboard download.
        - Allowed values: `completed`, `call_initiated`, `error`
      - `filter` (object, optional) — Dashboard Voice Agent filters. All supplied conditions must match. Maximum encoded filter size: 16 KB. Client, agent and date boundaries come from the request, not this object.
        - `audio_duration` (enum, optional) — Named duration range used by the Voice Agent dashboard.
          - Allowed values: `1-2 Minutes`, `3-5 Minutes`, `Above 2 Minutes`, `Less than 1 Minute`, `More than 5 Minutes`
        - `average_latency` (string, optional) — Nonnegative numeric milliseconds as a string; matched using the dashboard integer-floor rule.
        - `business_insights_multiple` (list of object, optional) — Configured business-insight answers to match. All supplied conditions must match.
          - `business_insight_key` (string, required) — Configured business-insight parameter name.
          - `business_insight_value` (string, required) — Stored answer to match; array answers match when they contain this value.
        - `campaign_batch_id` (string, optional) — Same matching rule and stored value as the Voice Agent dashboard filter.
        - `campaign_id` (string, optional) — Same matching rule and stored value as the Voice Agent dashboard filter.
        - `conversation_direction` (string, optional) — Same matching rule and stored value as the Voice Agent dashboard filter.
        - `conversation_id` (string, optional) — Same matching rule and stored value as the Voice Agent dashboard filter.
        - `crm_update_status` (string, optional) — Same matching rule and stored value as the Voice Agent dashboard filter.
        - `customer_id` (string, optional) — Same matching rule and stored value as the Voice Agent dashboard filter.
        - `disconnect_reason` (string, optional) — Same matching rule and stored value as the Voice Agent dashboard filter.
        - `disconnect_type` (string, optional) — Same matching rule and stored value as the Voice Agent dashboard filter.
        - `transfer_agent_answered` (string, optional) — Same matching rule and stored value as the Voice Agent dashboard filter.
        - `transfer_status` (string, optional) — Same matching rule and stored value as the Voice Agent dashboard filter.
    - `format` (enum, optional, default: csv) — Exports are CSV files.
      - Allowed values: `csv`
    - `parameters` (list of enum, optional) — Existing dashboard download sections to include. Defaults to all supported sections. Must include Metadata. Columns and flattening match the dashboard download.
      - Allowed values: `Business insight`, `CRM update payload`, `Conversation summary`, `Explanation`, `Future scheduling`, `Metadata`, `Request data`, `Subparameters`, `Tool calls`, `Transcript`

## Response

### 202

Export accepted for asynchronous processing.

- `data` (object, required)
  - `id` (string, required) — Stable export-job identifier.
  - `resource` (enum, required) — Resource included in this CSV export.
    - Allowed values: `conversations`, `customers`, `voice_conversations`
  - `format` (enum, required) — The generated file format.
    - Allowed values: `csv`
  - `status` (enum, required) — Job state. Download only when completed; failed jobs expose an error and expired files require a new export.
    - Allowed values: `queued`, `processing`, `completed`, `failed`, `expired`
  - `created_at` (long, required) — Time the job was created. Unix epoch seconds; milliseconds are invalid.
  - `completed_at` (long, required, nullable) — Time processing finished, including failure, in Unix epoch seconds; null while queued or processing.
  - `download_url` (string, required, nullable) — Temporary signed link to the completed CSV file; null until completed or when the file has expired. No file contents are embedded in this JSON response.
  - `download_expires_at` (long, required, nullable) — Expiry of the signed CSV download link in Unix epoch seconds; null when no link is available.
  - `error` (object, required, nullable) — Failure code and message for a failed job; otherwise null.
    - `code` (string, required) — Machine-readable export error.
    - `message` (string, required) — Human-readable failure reason.

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

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

**Request**

```json
{
  "resource": "conversations",
  "filters": {
    "service_id": "svc_demo_support",
    "start_time": 1788220800,
    "end_time": 1788307200,
    "time_field": "conversation_time"
  },
  "format": "csv"
}
```

**Response**

```json
{
  "data": {
    "id": "exp_123e4567e89b42d3a456426614174000",
    "resource": "conversations",
    "format": "csv",
    "status": "queued",
    "created_at": 1788307200,
    "completed_at": null,
    "download_url": null,
    "download_expires_at": null,
    "error": null
  }
}
```

**SDK Code**

```python
import requests

url = "https://anthropod.in/api/v2/exports"

payload = {
    "resource": "conversations",
    "filters": {
        "service_id": "svc_demo_support",
        "start_time": 1788220800,
        "end_time": 1788307200,
        "time_field": "conversation_time"
    },
    "format": "csv"
}
headers = {
    "Authorization": "Bearer <accountApiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://anthropod.in/api/v2/exports';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <accountApiKey>', 'Content-Type': 'application/json'},
  body: '{"resource":"conversations","filters":{"service_id":"svc_demo_support","start_time":1788220800,"end_time":1788307200,"time_field":"conversation_time"},"format":"csv"}'
};

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"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://anthropod.in/api/v2/exports"

	payload := strings.NewReader("{\n  \"resource\": \"conversations\",\n  \"filters\": {\n    \"service_id\": \"svc_demo_support\",\n    \"start_time\": 1788220800,\n    \"end_time\": 1788307200,\n    \"time_field\": \"conversation_time\"\n  },\n  \"format\": \"csv\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <accountApiKey>")
	req.Header.Add("Content-Type", "application/json")

	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/exports")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <accountApiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"resource\": \"conversations\",\n  \"filters\": {\n    \"service_id\": \"svc_demo_support\",\n    \"start_time\": 1788220800,\n    \"end_time\": 1788307200,\n    \"time_field\": \"conversation_time\"\n  },\n  \"format\": \"csv\"\n}"

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.post("https://anthropod.in/api/v2/exports")
  .header("Authorization", "Bearer <accountApiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"resource\": \"conversations\",\n  \"filters\": {\n    \"service_id\": \"svc_demo_support\",\n    \"start_time\": 1788220800,\n    \"end_time\": 1788307200,\n    \"time_field\": \"conversation_time\"\n  },\n  \"format\": \"csv\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://anthropod.in/api/v2/exports', [
  'body' => '{
  "resource": "conversations",
  "filters": {
    "service_id": "svc_demo_support",
    "start_time": 1788220800,
    "end_time": 1788307200,
    "time_field": "conversation_time"
  },
  "format": "csv"
}',
  'headers' => [
    'Authorization' => 'Bearer <accountApiKey>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://anthropod.in/api/v2/exports");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <accountApiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"resource\": \"conversations\",\n  \"filters\": {\n    \"service_id\": \"svc_demo_support\",\n    \"start_time\": 1788220800,\n    \"end_time\": 1788307200,\n    \"time_field\": \"conversation_time\"\n  },\n  \"format\": \"csv\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <accountApiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "resource": "conversations",
  "filters": [
    "service_id": "svc_demo_support",
    "start_time": 1788220800,
    "end_time": 1788307200,
    "time_field": "conversation_time"
  ],
  "format": "csv"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://anthropod.in/api/v2/exports")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

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