The Conversations API provides programmatic access to conversation records generated by your PolyAI agents. Query transcripts, turn-by-turn metadata, handoff information, and performance metrics in a structured format–ideal for analytics pipelines, compliance reporting, and downstream integrations.Documentation Index
Fetch the complete documentation index at: https://docs.poly.ai/llms.txt
Use this file to discover all available pages before exploring further.
API versions
Only the Conversations API is versioned. Other APIs are currently unversioned.v3 – current and recommended
v3 is the fully supported release of the Conversations API. It runs on PolyAI’s event-sourced data platform and improves on v1 by offering:- reliable, scalable ingestion and querying
- consistent ISO8601 timestamps
- empty strings ("") instead of
nullfor empty text fields - additional turn-level metadata such as
latency,translated_user_input, andenglish_agent_response
https://api.{region}.platform.polyai.app/v3/{account_id}/{project_id}/conversations
v2
v2 uses the same schema and event-sourced backend as v3, but retains the legacy authentication model. Existing customers can continue using v2, but new customers should use v3v1 – legacy
v1 uses an earlier data pipeline and the legacy authentication system. Deprecation timeline- From 2 March 2026, v1 moves to best-effort support (no SLA).
- From 31 August 2026, v1 remains available but is no longer supported.
Regional base URLs
| Region | Base URL |
|---|---|
| US | https://api.us-1.platform.polyai.app |
| UK | https://api.uk-1.platform.polyai.app |
| EUW | https://api.euw-1.platform.polyai.app |
https://api.{region}.platform.polyai.app/{version}/{account_id}/{project_id}/conversations
Authentication
The Conversations API uses API key authentication.v3 keys
v3 keys are project- and region-scoped and are issued by PolyAI. Your PolyAI representative will confirm the appropriate scope and provision access.Retrieval modes (optional)
The v3 endpoint supports three optional retrieval modes powered by Smart Analyst tooling: transcript search, semantic search, and random sampling. When no retrieval mode is specified, the endpoint returns all conversations matching the given filters (default behavior). Only one mode may be used per request.| Mode | Parameter | Requires query | Description |
|---|---|---|---|
| Transcript search | query_type=transcript | Yes | Full-text search over conversation transcripts. Optionally scoped to user or agent turns with turn_type. |
| Semantic search | query_type=semantic | Yes | Vector similarity search. Returns conversations semantically similar to the query text. |
| Random sampling | sample=random | No | Returns a random sample of conversations in the time range. |
Query parameters
The Conversations API supports several query parameters for filtering and controlling the response:Time range parameters
| Parameter | Description | Required |
|---|---|---|
start_time | Start of time range (ISO8601) | Required when using retrieval modes (query_type or sample). Optional otherwise – if omitted, no lower time bound is applied. |
end_time | End of time range (ISO8601) | Required when using retrieval modes (query_type or sample). Optional otherwise – if omitted, no upper time bound is applied. |
Retrieval mode parameters (optional)
| Parameter | Type | Description |
|---|---|---|
query_type | string | Search mode: transcript or semantic. Requires query. Mutually exclusive with sample. |
sample | string | Sampling mode: random. Mutually exclusive with query_type. |
query | string | The search text used for transcript or semantic search. Required when query_type is set. |
turn_type | string | Transcript search only. Filter by user or agent turns. Defaults to both. |
Optional filters
| Parameter | Description | Default |
|---|---|---|
client_env | Environment: sandbox, pre-release, or live | live |
channel | One or more channels to filter by (e.g. voice, chat) | – |
variant_id | Filter by variant ID | – |
variant_name | Filter by variant name (URL-encode spaces with %20) | – |
in_progress | Filter by conversation status: true for in-progress, false for finished | all |
limit | Max conversations per request (1–5000) | 5 |
offset | Pagination offset | 0 |
Optional response fields
| Parameter | Description | Default |
|---|---|---|
include_latency | Include latency metrics per conversation | false |
include_turn_metadata | Include additional generative AI metadata for each turn. This does not control whether the turns array is returned – turns are always included. | false |
Response structure
Conversation object
| Field | Description |
|---|---|
id | Unique conversation ID |
account_id | Customer account ID |
project_id | Project ID |
variant_id | Variant ID |
variant_name | Variant name |
environment | Deployment environment (live, sandbox, pre-release) |
started_at | Conversation start time (ISO8601) |
channel | Conversation medium. Common values: VOICE-SIP (voice/telephony), WEBCHAT (webchat widget), CHAT (agent chat). These are analytics-level labels – for runtime channel detection in custom functions, see conv.channel_type. |
from_number | Caller phone number |
to_number | Agent phone number |
in_progress | Whether call is still active |
num_turns | Total number of turns in the conversation (integer count) |
total_duration | Total call duration (seconds) |
polyai_duration | PolyAI-handled duration (seconds) |
handoff | Whether handoff occurred |
handoff_reason | Brief handoff reason |
handoff_destination | Handoff destination |
num_silences | Count of silence turns |
num_ood | Count of out-of-domain turns |
metrics | Custom metrics logged by agent |
state | All conversation variables (conv.state values) set during the call, returned as key-value pairs. Includes both built-in keys (e.g. from_, to, call_sid) and any custom variables your agent writes. |
turns | Ordered list of conversation turn objects. May be empty if transcript access is disabled in your project’s API configuration (see transcript visibility). |
Turn object
| Field | Description |
|---|---|
user_input | User’s transcribed text |
user_input_datetime | When agent received input (ISO8601) |
barge_in | Whether user interrupted the agent |
agent_response | Agent’s response text |
agent_response_datetime | When agent responded (ISO8601) |
intents | Detected intents |
entities | Detected entities (name → value mapping) |
is_ood | Whether turn was out-of-domain |
is_silence | Whether turn was a silence |
translated_user_input | Translated user input (when enabled) |
english_agent_response | English version of response (when enabled) |
Pagination
When results exceed the limit, the response includesnext_offset. Use this value as the offset parameter in your next request to fetch the next page.
Examples
All examples use the v3 endpoint:GET https://api.{region}.platform.polyai.app/v3/{account_id}/{project_id}/conversations
Retrieve all conversations in a time range
Search transcripts for a keyword
Usequery_type=transcript to find conversations containing specific text. Optionally filter by turn_type to search only user or agent turns.
Semantic search
Usequery_type=semantic to find conversations that are semantically similar to your query, even if the exact words don’t appear in the transcript.
Random sampling
Usesample=random to retrieve a random subset of conversations in a time range – useful for quality audits.
Filter by channel
Use thechannel parameter to restrict results to a specific medium. You can specify it multiple times to include several channels.
- complete turn-by-turn transcript
- consistent timestamps
- latency metrics (when
include_latency=true) - translation outputs (when enabled)
- handoff metadata (if applicable)
Understanding turns, num_turns, and include_turn_metadata
These three fields are often confused. Here’s how they relate:
| Field | Type | Purpose |
|---|---|---|
turns | Array of turn objects | The full ordered list of conversation turns. Included by default, but may be empty if transcript access is disabled in the project’s API configuration. |
num_turns | Integer | A count of turns in the conversation. This value reflects the number of turns that occurred, even if the turns array is empty due to configuration. |
include_turn_metadata | Query parameter (boolean) | When true, adds an extra metadata field to each turn with generative AI details. Does not control whether the turns array itself is populated. |
Transcript visibility
Theturns array in the API response is controlled by the Conversation transcript toggle (underlying field: show_transcripts) in your project’s API key configuration. When transcript access is disabled, the API returns an empty turns array even though num_turns still reports the actual count.
This is the most common reason for missing turn data. To check or update this setting:
Open the API Keys page
Go to the API Keys tab on the workspace homepage in Agent Studio (next to Agents, Secrets, and Users).

Troubleshooting
turns is empty but num_turns is greater than zero
This is the most common issue reported by API users. Use this decision tree to diagnose the cause:
Check transcript visibility (most likely fix)
Go to the API Keys tab on the workspace homepage, then click Configuration and verify that the Conversation transcript toggle is enabled for your project. This is a project-level setting. See transcript visibility for details.
Confirm you are using v3
Verify your endpoint URL contains
/v3/. The v1 API is deprecated and may not return full conversation data. v1 moved to best-effort support on 2 March 2026 and will be unsupported from 31 August 2026.Check if the conversation is in progress
If
in_progress is true, turn data may still be arriving and may not be fully available yet.Only seeing basic fields (id, account_id, project_id, started_at)
If the response only contains a subset of expected fields:
- Confirm you are on v3. The full response schema (including
latency,translated_user_input,english_agent_response, etc.) is only available on v3. Check that your base URL uses/v3/, not/v1/. See the migration guide. - Check your API key permissions. On the API Keys tab of the workspace homepage, verify the API key has Conversations data permission enabled. The key must have the correct permission and the project must have the relevant metrics enabled.
- Check metric configuration. On the API Keys tab, click Configuration and verify the response metrics you expect are enabled (e.g.
CALL_IN_PROGRESS,CALL_COMPLETED,HANDOFF_TO). If no metrics are selected, themetricsobject in the response will be empty. - Check field whitelisting (v1 only). Projects on v1 may have field whitelisting enabled in their project configuration (
enable_whitelist: true). When active, the API only returns fields explicitly listed in the project’s API config — typically justid,started_at,account_id, andproject_id. If you are on v1 and see this behavior, migrate to v3 where field visibility is controlled through the API Keys Configuration panel instead.
include_latency or include_turn_metadata is not adding data
These parameters enrich existing turn data – they do not populate an empty turns array:
include_latency=trueadds per-turn latency metrics to each turn objectinclude_turn_metadata=trueadds additional generative AI metadata to each turn object
turns is empty, these parameters have no effect. Fix the underlying cause first (see transcript visibility above).

