Skip to main content

I Reverse-Engineered ChatGPT Voice and Found My Recordings in a ZIP

How a missing ChatGPT transcript sent me through DevTools, Burp Suite, and OpenAI endpoints, until I found my recordings inside a data-export ZIP.

By Kaushik Saravanan
ShareXLinkedInHN
Cover for I Reverse-Engineered ChatGPT Voice and Found My Recordings in a ZIP

TL;DR

I had an 8-minute voice conversation with ChatGPT. The transcript was missing, and I wanted to recover my original voice input.
I spent hours checking Chrome DevTools, Burp Suite, OpenAI endpoints, Grok, and Gemini before finding the recordings in my data export. Shortening the ZIP path let Windows extract them.


The transcript was missing

After an 8-minute voice conversation with ChatGPT, I tried to review what I had said. Instead of a transcript, I got:

"Transcription not available."

I didn't need ChatGPT's responses, I wanted my own spoken words back.

If I could play the recording, the data had to exist somewhere.


Checking ChatGPT requests

Using Chrome DevTools, I opened the Network tab and hit play on my voice message.
I found a POST request to:

POST /backend-api/synthesize

Parameters included:

  • messageId
  • conversationId
  • voice
  • format=mp3

The server returned an MP3 stream. This was text-to-speech tied to my recorded input.


Checking the request in Burp Suite

I intercepted the request with Burp Suite and tried a few changes:

  • Swapped in different messageId values
  • Tried other conversationIds
  • Changed or removed voice
  • Modified format to wav, ogg, etc.

Every attempt failed with:

"message cannot be read."

The /synthesize endpoint seemed locked down with auth or encryption. My voice wasn't coming out that way.


Downloadable files use a different path

I remembered that ChatGPT can generate downloadable files (e.g., oaiusercontent.com links).
This hinted that file storage and voice playback might use separate backends.


Reading the conversation data

Next, I queried:

GET /conversation/[conversation_id]

The response contained every message, audio reference, and metadata field. It ran to thousands of lines, so I looked for another way to find the recording.


Asking other models

  • Grok (X.ai) → "Query too long. Please shorten."
  • Gemini 2.5 Pro → Loaded the file fine, summarized it... but just confirmed what I already knew.

Exporting my data

I tried the official export:

Settings → Data Controls → Export My Data

Five minutes later: an 80MB ZIP file in my inbox.
That's big for text, there had to be audio in there.


Windows could not extract the ZIP

Windows' built-in extractor failed with:

".mp3 file is invalid or corrupted."

Inside the ZIP:
[conversation_id]/audio/
Windows claimed it was empty.


Shortening the file path

I remembered Windows' 260-character file path limit. I shortened the path and tried again.

  1. Rename ZIP to something short
  2. Move it to C:\chatgpt
  3. Extract manually via Explorer

Result: dozens of .mp3 files, my actual ChatGPT voice inputs.
Played one in VLC, there I was.


What I learned

  • /synthesize is for playback generation, not storage
  • /conversation/[id] contains raw thread data
  • Downloadable files use a different backend logic
  • Data Export is the most reliable way to get voice data
  • Windows path length limits can silently break ZIPs
  • Using AI to summarize AI internals is oddly satisfying


See also

Cite as: Saravanan, K. (2025). I Reverse-Engineered ChatGPT Voice and Found My Recordings in a ZIP. Kaushik Saravanan. https://www.kaushik.cv/blog/zips-and-files