Speech Analytics API: 404 on GET /api/v2/analytics/conversations/details/export for Voice Transcripts

We’re trying to pull the full voice-to-text transcript for specific conversations to feed into our New Relic custom events dashboard. The goal is to correlate transcript sentiment scores with APM latency spikes.

I can successfully retrieve the conversation list using the standard analytics query endpoint. The response includes the conversationId and confirms the type is voice.

GET /api/v2/analytics/conversations/details/query?body={...}

However, when I try to fetch the actual transcript content using the detail export endpoint, I get a 404. The documentation suggests this endpoint works for both text and voice, but it seems to only return data for text-based interactions.

Here is the request payload:

{
 "query": {
 "select": [
 "conversationId",
 "transcript"
 ],
 "where": [
 {
 "path": "conversationId",
 "operation": "in",
 "value": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
 }
 ]
 }
}

The error response is:

{
 "status": 404,
 "code": "not.found",
 "message": "The requested resource was not found."
}

I’ve verified the OAuth token has analytics:report:read and speech:transcript:view scopes. The conversation definitely exists and was recorded in the last 24 hours. Is there a different endpoint for voice transcripts, or do I need to wait for a specific processing state before the transcript becomes available via API? The status in the initial query shows completed.

You’re hitting a 404 because that endpoint is for async export jobs, not direct transcript retrieval. You can’t just GET the transcript like a static file. The transcript isn’t ready immediately either. Speech analytics processes asynchronously.

First, you need to kick off the export job with a POST. Then poll the status. Here’s the flow:

POST /api/v2/analytics/conversations/details/export
Authorization: Bearer <token>
Content-Type: application/json

{
 "viewId": "voice",
 "timeRange": {
 "type": "relative",
 "duration": "P1D"
 },
 "filters": [
 {
 "type": "conversation",
 "id": "<your-conversation-id>"
 }
 ]
}

The response gives you a jobId. Poll GET /api/v2/analytics/conversations/details/export/{jobId} until status is completed. Only then do you download the CSV. Trying to fetch before processing finishes guarantees a 404 or empty result. Check the job status first.

Sorted. Added the analytics:conversation:export:read scope to the token and the 202 started coming back. Polling works fine now.