Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions fern/assistants/call-recording.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,10 @@ Configure different types of artifacts with these options:

## Storage Configuration

<Note>
With Zero Data Retention (ZDR), Vapi does not retain call content or artifact URLs in the call record. Configure your own storage before the call to keep a copy. See [Find recordings, transcripts, logs, and metadata with ZDR](/security-and-privacy/zero-data-retention#find-recordings-transcripts-logs-and-metadata) for retrieval steps and troubleshooting.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Edit update: tightened the callout to two sentences and matched the link text to the destination heading.

Suggested change
With Zero Data Retention (ZDR), Vapi does not retain call content or artifact URLs in the call record. Configure your own storage before the call to keep a copy. See [Find recordings, transcripts, logs, and metadata with ZDR](/security-and-privacy/zero-data-retention#find-recordings-transcripts-logs-and-metadata) for retrieval steps and troubleshooting.
With Zero Data Retention (ZDR), Vapi does not retain call content or artifact URLs in the call record, so configure your own storage before the call to keep a copy. To retrieve files or troubleshoot missing data, see [Find recordings, transcripts, logs, and metadata](/security-and-privacy/zero-data-retention#find-recordings-transcripts-logs-and-metadata).

</Note>

### Default Storage

By default, Vapi stores artifacts securely in the cloud:
Expand All @@ -230,8 +234,8 @@ Configure custom storage for different artifact types:
"recordingUseCustomStorageEnabled": true,
"loggingUseCustomStorageEnabled": true,
"pcapUseCustomStorageEnabled": true,
"recordingPath": "https://your-bucket.s3.amazonaws.com/recordings/",
"loggingPath": "https://your-bucket.s3.amazonaws.com/logs/",
"recordingPath": "/recordings",
"loggingPath": "/logs",
"pcapS3PathPrefix": "/pcaps",
"transcriptPlan": {
"enabled": true,
Expand Down Expand Up @@ -260,8 +264,8 @@ Configure custom storage for different artifact types:
"recordingUseCustomStorageEnabled": true,
"loggingUseCustomStorageEnabled": true,
"pcapUseCustomStorageEnabled": true,
"recordingPath": "gs://your-bucket/recordings/",
"loggingPath": "gs://your-bucket/logs/",
"recordingPath": "/recordings",
"loggingPath": "/logs",
"transcriptPlan": {
"enabled": true,
"assistantName": "Assistant",
Expand Down Expand Up @@ -375,7 +379,7 @@ Enable comprehensive logging for debugging and analysis:
"artifactPlan": {
"loggingEnabled": true,
"loggingUseCustomStorageEnabled": true,
"loggingPath": "https://your-bucket.s3.amazonaws.com/logs/"
"loggingPath": "/logs"
}
}
```
Expand Down
75 changes: 43 additions & 32 deletions fern/security-and-privacy/zero-data-retention.mdx
Original file line number Diff line number Diff line change
@@ -1,52 +1,63 @@
---
title: Zero Data Retention (ZDR)
subtitle: Enable Zero Data Retention so Vapi processes calls without storing recordings, transcripts, or logs
description: Zero Data Retention (ZDR) is an organization-level setting that stops Vapi from storing call recordings, transcripts, messages, summaries, and logs after a call ends.
subtitle: Understand what Vapi retains and where to retrieve your call data
description: 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.
slug: security-and-privacy/zero-data-retention
---

Zero Data Retention (ZDR) is an organization-level setting that stops Vapi from storing call content after a call ends. ZDR applies across your entire organization once active. Use it when your organization must not retain recordings, transcripts, or logs in Vapi.
**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.

## How it works
## What ZDR retains

With ZDR active, Vapi processes each call in real time but does not save call content to its storage. Vapi does not retain recordings, transcripts, messages, summaries, or structured outputs. Vapi keeps only operational metadata, such as call history, cost, and latency, so those still appear in the Dashboard.
Vapi processes calls in real time. After a call ends, it retains operational metadata so you can still see call history and usage.

ZDR is enabled for an organization from the Dashboard. It is not a setting in the API.

| Data | Retained by Vapi with ZDR enabled |
| Data | Retained in Vapi with ZDR |
| --- | --- |
| Recordings | No |
| Transcripts | No |
| Messages | No |
| Call summary | No |
| Structured outputs | No |
| Detailed call logs | No |
| Call history, cost, latency | Yes |
| Billing and usage metadata | Yes |
| 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 are mutually exclusive. HIPAA mode additionally supports a Business Associate Agreement (BAA), requires HIPAA-compliant providers, and lets you retrieve recordings and logs from private storage. To switch, disable one mode before enabling the other. See [HIPAA Compliance](/security-and-privacy/hipaa) to compare.
ZDR and [HIPAA mode](/security-and-privacy/hipaa) are mutually exclusive. The structured-output override does not enable HIPAA mode.
</Note>

## Enable ZDR
## 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.
</Note>

Enable **Zero data retention (ZDR)** for your organization from the Dashboard. ZDR does not require a separate purchase.
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>
Keeping your own copy of call data is optional. To retain recording files, transcripts, and logs, configure a [storage bucket](/assistants/call-recording#storage-configuration). To save structured outputs, subscribe to the [`end-of-call-report` webhook](/server-url/events). Set this up before enabling ZDR because once ZDR is active, any call content you do not send to your own systems cannot be recovered.
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.
</Tip>

## Verify it works

Place a test call, then open it in the Dashboard. The call appears in your call history with cost and latency, but the transcript, recording, and analysis are empty.
## If you cannot find your data

## Related
- **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.

<CardGroup cols={2}>
<Card title="HIPAA Compliance" href="/security-and-privacy/hipaa">
Compare ZDR with HIPAA-compliant storage and the BAA option.
</Card>
<Card title="Data flow" href="/security-and-privacy/data-flow">
How call data moves through Vapi and customer-managed storage.
</Card>
</CardGroup>
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.
Loading