Fetching complete voice-to-text transcripts via /api/v2/analytics/conversations/details returns fragmented text

We’re building a custom agent desktop sidecar using the Genesys Cloud Client App SDK. The goal is to display the full AI-generated transcript for voice interactions directly in the UI. We’re hitting the GET /api/v2/analytics/conversations/details endpoint with type=voice and analyticsType=speechAndText. The docs suggest this should return the transcript segments, but we’re seeing a disconnect between the conversationId and the actual text payload.

Here’s the curl equivalent of what we’re sending:

curl -X GET "https://api.mypurecloud.com/api/v2/analytics/conversations/details?type=voice&analyticsType=speechAndText&dateFrom=2023-10-01T00:00:00.000Z&dateTo=2023-10-02T00:00:00.000Z&groupBy=conversation" \
 -H "Authorization: Bearer <token>" \
 -H "Content-Type: application/json"

The response comes back with a 200 OK, but the JSON structure is confusing. We get a list of conversations, but the transcripts field is either missing or only contains the first 30 seconds of audio. We tried adding intervalSize=PT1H to break it down, but that just gave us hourly aggregates without the actual text.

We also tried using the GET /api/v2/analytics/conversations/transcripts/{conversationId} endpoint directly. That works for individual IDs, but it’s painfully slow when you have hundreds of calls to process. We need a bulk method.

We’ve checked the analytics job status via GET /api/v2/analytics/jobs/{jobId} and it shows as completed. The speech analytics are enabled in the org settings. We’re using the Python SDK genesys_cloud_analytics package to make these calls.

Is there a specific query parameter we’re missing to force the full transcript retrieval? Or is there a limit on how much text is returned per call? We tried increasing the pageSize to 1000, but that just returns more conversation metadata, not more text per conversation.

Here’s a snippet of the response we’re getting:

{
 "items": [
 {
 "id": "abc-123",
 "type": "voice",
 "transcripts": []
 }
 ]
}

The array is empty. We know the transcript exists because we can see it in the web UI. Any ideas on why the API is returning null data here?