> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.vapi.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.vapi.ai/_mcp/server.

# Zero Data Retention (ZDR)

> Learn what Zero Data Retention keeps in Vapi, how to retrieve recordings, transcripts, and logs from your own storage, and what to check when files are missing.

**Zero Data Retention (ZDR)** stops Vapi from retaining call content after a call ends. Enable it for your organization in the Dashboard. ZDR applies to all calls in that organization and does not require a separate purchase.

## What ZDR retains

Vapi processes calls in real time. After a call ends, it retains operational metadata so you can still see call history and usage.

| Data                                                                 | Retained in Vapi with ZDR |
| -------------------------------------------------------------------- | ------------------------- |
| Recordings, transcripts, messages, summaries, and detailed call logs | No                        |
| Structured outputs                                                   | No by default             |
| Call history, cost, latency, billing, and usage metadata             | Yes                       |

A structured output with `compliancePlan.forceStoreOnHipaaEnabled: true` can still be retained under ZDR. Leave this override unset or `false` to prevent storage of that output.

> **Note**
>
> ZDR and [HIPAA mode](/security-and-privacy/hipaa) are mutually exclusive. The structured-output override does not enable HIPAA mode.

## Find recordings, transcripts, logs, and metadata

With ZDR, retrieve call content from **your own storage**.

> **Note**
>
> Vapi removes recording and other artifact URLs from the retained call record. Later API responses and the Dashboard can show blank URLs even when files were delivered to your configured bucket. A blank URL alone does not establish recording or upload failure.
>
> Check the storage locations below and any live end-of-call report your application saved. If a file is missing there too, check whether recording was enabled and the upload succeeded.

Before the call:

1. Connect a bucket using the [storage setup guide](/assistants/call-recording#storage-configuration) or [S3 guide](/providers/cloud/s3).
2. Enable recording, transcription, and logging for the artifacts you need in the assistant's **Recording & Artifacts** settings. Keep custom storage enabled for those artifacts. Recording also depends on any [consent plan](/security-and-privacy/recording-consent-plan).
3. Confirm the storage settings belong to the organization handling the call. Use the [matching region](/security-and-privacy/eu-region) for its API key and endpoints.

Enabling ZDR alone does not configure uploads. Without custom storage, Vapi does not retain these files for you.

| What you need                                | Where to look in your bucket                                    |
| -------------------------------------------- | --------------------------------------------------------------- |
| Audio recording                              | The configured recording path, as WAV or MP3 files              |
| Transcript, messages, and available analysis | The call JSON at `<credential-prefix>/vapi/call/<call-id>.json` |
| Detailed call logs                           | The configured logging path, as `.jsonl.gz` files               |

The storage credential's prefix combines with the assistant's `recordingPath` or `loggingPath`. These are bucket-relative paths, such as `/recordings` and `/logs`. Search the configured location using the call ID as a filename prefix. Audio and log filenames also contain generated timestamps and UUIDs, so you cannot derive a complete filename from the call ID alone.

> **Tip**
>
> You can also save the [`end-of-call-report` webhook](/server-url/events#end-of-call-report) in your own application. Its `message.artifact` can contain the transcript and recording URLs available for the call. Save the payload when it arrives because later call API responses do not retain that content under ZDR.

## If you cannot find your data

* **Check setup.** Confirm the relevant artifacts and custom storage were enabled before the call. A call JSON file does not guarantee that audio was recorded.
* **Check the location.** Verify the organization, bucket, credential prefix, and assistant paths. If a prefix uses date templates, use the upload date.
* **Check upload and access.** Allow post-call processing to finish. Confirm upload success and bucket write permissions. Use an authenticated storage console, CLI, or SDK with read access to retrieve private files.
* **Check your saved copies.** Vapi cannot reconstruct call content that was not successfully delivered to your own systems. Storage configured now applies to future calls.

After setup, place a test call. Confirm that its files appear in your bucket. Check that the call appears in Vapi's history with cost and latency.