Appearance
For clean Markdown of any page, append .md to the page URL. For a complete documentation index, see For full documentation content, see For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at
PII Redaction
Redact PII that is spoken in your audio
For the complete documentation index, see llms.txtSupported models: Universal-3 Pro (
universal-3-pro), Universal-2 (universal-2)Supported regions: US and EUSupported languages: 50 languages including English, Spanish, French, German, Italian, Portuguese, Dutch, Hindi, Japanese, Chinese, and more. See Supported Languages for the full list.Key API parameters:-redact_pii(boolean) - Enable PII redaction
redact_pii_policies(array of strings) - Which PII types to redact (e.g.,person_name,email_address,phone_number,us_social_security_number,credit_card_number)redact_pii_sub(string) - Substitution method:hash(replace with #) orentity_name(replace with [ENTITY_TYPE])redact_pii_audio(boolean) - Generate redacted audio file with PII beeped outredact_pii_audio_quality(string) -mp3(default) orwavredact_pii_audio_options.override_audio_redaction_method(string) - Set tosilenceto use silence instead of beepredact_pii_return_unredacted(boolean) - Opt-in. Whentrue, returns the original unredacted transcript alongside the redacted one. Addsunredacted_text,unredacted_words, andunredacted_utterancesto the response. Requiresredact_pii: true. By default, no unredacted transcript is returned —text/words/utterancesstay fully redacted.cURL quickstart:curl \ --header "Authorization: YOUR_API_KEY" \ --header "Content-Type: application/json" \ --data '{ "audio_url": "YOUR_AUDIO_URL", "speech_models": ["universal-3-pro", "universal-2"], "redact_pii": true, "redact_pii_policies": ["person_name", "organization", "occupation"], "redact_pii_sub": "hash" }'PollGET /v2/transcript/{id}untilstatusiscompleted. Thetextfield will contain the redacted transcript.Redacted audio retrieval:curl \ --header "Authorization: YOUR_API_KEY"Redacted audio files are only available for 24 hours. Max original file size: 1 GB.US & EUThe PII Redaction model lets you minimize sensitive information about individuals by automatically identifying and removing it from your transcript.Personal Identifiable Information (PII) is any information that can be used to identify a person, such as a name, email address, or phone number. To redact PII from text rather than audio, see Redact PII from Text Using LLM Gateway.When you enable the PII Redaction model, your transcript will look like this:- Withhashsubstitution:Hi, my name is ####!- With
entity_namesubstitution:Hi, my name is [PERSON_NAME]!You can also Create redacted audio files to replace sensitive information in the audio with a beeping sound or silence.PII only redacts words in thetextproperty. Properties from other features may still include PII, such asentitiesfrom Entity Detection orsummaryfrom Summarization.## QuickstartEnable Topic Detection by settingredact_piitoTruein the JSON payload.Setredact_pii_policiesto specify the information you want to redact. For the full list of policies, see PII policies.Setredact_pii_subto specify the replacement for redacted information.```python {19-21} import requests import time
base_url = ""
headers = { "authorization": "<YOUR_API_KEY>" }
with open("./local_file.mp3", "rb") as f: response = requests.post(base_url + "/v2/upload", headers=headers, data=f)
upload_url = response.json()["upload_url"]
data = { "audio_url": upload_url, # You can also use a URL to an audio or video file on the web "speech_models": ["universal-3-pro", "universal-2"], "language_detection": True, "redact_pii": True, "redact_pii_policies": ["person_name", "organization", "occupation"], "redact_pii_sub": "hash" }
url = base_url + "/v2/transcript" response = requests.post(url, json=data, headers=headers)
transcript_id = response.json()['id'] polling_endpoint = base_url + "/v2/transcript/" + transcript_id
print(f"Transcript ID: {transcript_id}")
while True: transcription_result = requests.get(polling_endpoint, headers=headers).json()
if transcription_result['status'] == 'completed':
print(transcription_result['text'])
break
elif transcription_result['status'] == 'error':
raise RuntimeError(f"Transcription failed: {transcription_result['error']}")
else:
time.sleep(3)
Enable PII Redaction on the `TranscriptionConfig` using the `set_redact_pii()` method.Set `policies` to specify the information you want to redact. For the full list of policies, see [PII policies](#pii-policies).python {8-15} import assemblyai as aai
aai.settings.api_key = "<YOUR_API_KEY>"
audio_file = "./local_file.mp3"
audio_file = ""
config = aai.TranscriptionConfig( speech_models=["universal-3-pro", "universal-2"], language_detection=True, ).set_redact_pii( policies=[ aai.PIIRedactionPolicy.person_name, aai.PIIRedactionPolicy.organization, aai.PIIRedactionPolicy.occupation, ], substitution=aai.PIISubstitutionPolicy.hash, )
transcript = aai.Transcriber().transcribe(audio_file, config) print(f"Transcript ID: {transcript.id}")
print(transcript.text) Enable Topic Detection by setting `redact_pii` to `true` in the JSON payload.Set `redact_pii_policies` to specify the information you want to redact. For the full list of policies, see [PII policies](#pii-policies).Set `redact_pii_sub` to specify the replacement for redacted information.javascript {19-21} import fs from "fs-extra";
const baseUrl = "";
const headers = { authorization: "<YOUR_API_KEY>", };
const path = "./my-audio.mp3"; const audioData = await fs.readFile(path); let res = await fetch(${baseUrl}/v2/upload, { method: "POST", headers, body: audioData, }); if (!res.ok) throw new Error(Error: ${res.status}); const uploadResponse = await res.json(); const uploadUrl = uploadResponse.upload_url;
const data = { audio_url: uploadUrl, // You can also use a URL to an audio or video file on the web speech_models: ["universal-3-pro", "universal-2"], language_detection: true, redact_pii: true, redact_pii_policies: ["person_name", "organization", "occupation"], redact_pii_sub: "hash", };
const url = ${baseUrl}/v2/transcript; res = await fetch(url, { method: "POST", headers: { ...headers, "Content-Type": "application/json" }, body: JSON.stringify(data), }); if (!res.ok) throw new Error(Error: ${res.status}); const response = await res.json();
const transcriptId = response.id; console.log("Transcript ID: ", transcriptId);
const pollingEndpoint = ${baseUrl}/v2/transcript/${transcriptId};
while (true) { res = await fetch(pollingEndpoint, { headers }); if (!res.ok) throw new Error(Error: ${res.status}); const transcriptionResult = await res.json();
if (transcriptionResult.status === "completed") { console.log(transcriptionResult.text); break; } else if (transcriptionResult.status === "error") { throw new Error(Transcription failed: ${transcriptionResult.error}); } else { await new Promise((resolve) => setTimeout(resolve, 3000)); } } Enable PII Redaction by setting `redact_pii` to `true` in the transcription config.Use `redact_pii_policies` to specify the information you want to redact. For the full list of policies, see [PII policies](#pii-policies).javascript {12-14} import { AssemblyAI } from "assemblyai";
const client = new AssemblyAI({ apiKey: "<YOUR_API_KEY>", });
// const audioFile = './local_file.mp3' const audioFile = "";
const params = { audio: audioFile, speech_models: ["universal-3-pro", "universal-2"], language_detection: true, redact_pii: true, redact_pii_policies: ["person_name", "organization", "occupation"], redact_pii_sub: "hash", };
const run = async () => { const transcript = await client.transcripts.transcribe(params);
console.log(transcript.text); };
run(); ### Example outputplain Smoke from hundreds of wildfires in Canada is triggering air quality alerts throughout the US. Skylines from Maine to Maryland to Minnesota are gray and smoggy. And in some places, the air quality warnings include the warning to stay inside. We wanted to better understand what's happening here and why, so we called ##### #######, an ######### ######### in the ########## ## #############
### ########### at ##### ####### ##########. Good morning, #########.
Good morning. So what is it about the conditions right now that have caused this round of wildfires to affect so many people so far away? Well, there's a couple of things. The season has been pretty dry already, and then the fact that we're getting hit in the US. Is because there's a couple of weather systems that ...
If
check out this guide [Redact PII from Text Using LLM
Gateway](/docs/guides/llm-gateway-pii-redaction).## Create redacted audio filesIn addition to redacting sensitive information from the transcription text, you can also generate a version of the original audio file with the PII "beeped" out. You can optionally use silence instead of a beep by setting `override_audio_redaction_method` to `"silence"` within `redact_pii_audio_options`.Retrieve the redacted audio file using the `transcript_id` for a transcript where `redact_pii_audio` was enabled during submission:### RequestGET
curl \
-H "Authorization: "
```Redacted audio files are only available for 24 hours. Make sure to download the file within this time frame.To create a redacted version of the audio file, set `redact_pii_audio` to `True` on the JSON payload.
Set `redact_pii_audio_quality` to specify the quality of the redacted audio file.Use the transcript ID to poll the [GET redacted audio endpoint](/docs/api-reference/transcripts/get-redacted-audio) every few seconds to check the status of the redacted audio. Once the status is `redacted_audio_ready`, you can retrieve the audio URL from the API response.```python {6-10,14-25}
data = {
"audio_url": upload_url, # You can also use a URL to an audio or video file on the web
"redact_pii": True,
"redact_pii_policies": ["person_name", "organization", "occupation"],
"redact_pii_sub": "hash",
"redact_pii_audio": True,
"redact_pii_audio_quality": "wav", # Optional. Defaults to "mp3"
"redact_pii_audio_options": {
"override_audio_redaction_method": "silence" # Optional. Omit for default (beep)
}
}
# ...
redacted_audio_polling_endpoint = base_url + "/v2/transcript/" + transcript_id + "/redacted-audio"
while True:
redacted_audio_result = requests.get(redacted_audio_polling_endpoint, headers=headers).json()
if redacted_audio_result['status'] == 'redacted_audio_ready':
print(redacted_audio_result['redacted_audio_url'])
break
elif redacted_audio_result['status'] == 'error':
raise RuntimeError(f"Transcription failed: {redacted_audio_result['error']}")
else:
time.sleep(3)
```To create a redacted version of the audio file, use the `set_redact_pii()` method on the `TranscriptionConfig` with `redact_audio` to `True`.Use `get_redacted_audio_url()` on the transcript to get the URL to the redacted audio file.```python {7-8,13}
config = aai.TranscriptionConfig().set_redact_pii(
policies=[
aai.PIIRedactionPolicy.person_name,
aai.PIIRedactionPolicy.organization,
aai.PIIRedactionPolicy.occupation,
],
redact_audio=True,
redact_audio_options={"override_audio_redaction_method": "silence"} # Optional. Omit for default (beep)
)
transcript = aai.Transcriber().transcribe(audio_url, config)
print(transcript.get_redacted_audio_url())
```To create a redacted version of the audio file, set `redact_pii_audio` to `true` on the JSON payload.
Set `redact_pii_audio_quality` to specify the quality of the redacted audio file.Use the transcript ID to poll the [GET redacted audio endpoint](/docs/api-reference/transcripts/get-redacted-audio) every few seconds to check the status of the redacted audio. Once the status is `redacted_audio_ready`, you can retrieve the audio URL from the API response.```javascript {6-10,14,17-29}
const data = {
audio_url: uploadUrl, // You can also use a URL to an audio or video file on the web
redact_pii: true,
redact_pii_policies: ["person_name", "organization", "occupation"],
redact_pii_sub: "hash",
redact_pii_audio: true,
redact_pii_audio_quality: "wav", // Optional. Defaults to "mp3"
redact_pii_audio_options: {
override_audio_redaction_method: "silence", // Optional. Omit for default (beep)
},
};
// ...
const redactedAudioPollingEndpoint = `${baseUrl}/v2/transcript/${transcriptId}/redacted-audio`;
while (true) {
let res = await fetch(redactedAudioPollingEndpoint, { headers });
if (!res.ok) throw new Error(`Error: ${res.status}`);
const redactedAudioResult = await res.json();
if (redactedAudioResult.status === "redacted_audio_ready") {
console.log(redactedAudioResult.redacted_audio_url);
break;
} else if (redactedAudioResult.status === "error") {
throw new Error(`Transcription failed: ${redactedAudioResult.error}`);
} else {
await new Promise((resolve) => setTimeout(resolve, 3000));
}
}
```To create a redacted version of the audio file, set `redact_pii_audio` to
`true` in the transcription config. Use `redact_pii_audio_quality` to specify
the quality of the redacted audio file.Use redactedAudio() on the transcript to get the URL to the redacted audio file.```javascript {5-9, 15-17}
const params = {
audio: audioFile,
redact_pii: true,
redact_pii_policies: ["person_name", "organization", "occupation"],
redact_pii_audio: true,
redact_pii_audio_quality: "wav", // Optional. Defaults to "mp3"
redact_pii_audio_options: {
override_audio_redaction_method: "silence", // Optional. Omit for default (beep)
},
};
const run = async () => {
const transcript = await client.transcripts.transcribe(params);
const { status, redacted_audio_url } = await client.transcripts.redactedAudio(
transcript.id
);
console.log(`Status: ${status}, Redacted audio URL: ${redacted_audio_url}`);
};
run();
```You can also retrieve the redacted audio file itself using `redactedAudioFile()`.
The following code writes the redacted audio file to a local file, using `writeFile()` from Node.js.```javascript
import fs from "fs/promises";
...
const audioFile = await client.transcripts.redactedAudioFile(transcript.id);
await fs.writeFile('./redacted-audio.wav', audioFile.body, 'binary');
```You can only create redacted versions of audio files if the original file is
smaller than 1 GB. For files over 1 GB, see the [Downsampling guide](/docs/pre-recorded-audio/guides/downsampling) to reduce file size before redaction.By default, audio redaction provides redacted audio URLs only when speech is detected. However, if your use-case specifically requires redacted audio files even for silent audio files without any dialogue, you can now opt to receive these URLs. Enable this by setting the optional parameter `"return_redacted_no_speech_audio": true` within `redact_pii_audio_options` in your `POST` request body.```json
{
"audio_url": "YOUR_AUDIO_URL",
"redact_pii": true,
"redact_pii_audio": true,
"redact_pii_audio_options": {
"return_redacted_no_speech_audio": true
},
"redact_pii_policies": ["credit_card_number"]
}
```### Example output```plain
```## Return the unredacted transcriptIf your workflow needs both the redacted and unredacted transcripts, you can request both in a single transcription call by setting `redact_pii_return_unredacted` to `true`. This avoids the need to send a second API request without redaction.Enabling PII Redaction by itself does **not** return the unredacted transcript — the default behavior is to redact `text`, `words`, and `utterances` and return only the redacted versions. The unredacted transcript is only returned when you explicitly set `redact_pii_return_unredacted` to `true`, and `redact_pii` must also be `true` (otherwise the request is rejected with a 400).Only use this feature if your workflow specifically requires access to both the redacted and unredacted transcripts from the same request. If you only need the redacted transcript, leave this parameter off. When `redact_pii_return_unredacted` is `false` or omitted, the three `unredacted_*` fields are not included in the response at all.When `redact_pii_return_unredacted` is `true`, the response includes three additional fields alongside their redacted counterparts:| Field | Type | Description |
| ----------------------- | ------------------ | ---------------------------------------------------------------------------- |
| `unredacted_text` | string | The original transcript text before PII redaction was applied. |
| `unredacted_words` | array of Word | The original word objects before redaction. Same shape as `words`. |
| `unredacted_utterances` | array of Utterance | The original utterance objects before redaction. Same shape as `utterances`. |Set `redact_pii_return_unredacted` to `True` alongside the existing PII parameters. The completed transcript will include `unredacted_text`, `unredacted_words`, and `unredacted_utterances` in addition to the redacted versions.```python {6}
data = {
"audio_url": upload_url, # You can also use a URL to an audio or video file on the web
"redact_pii": True,
"redact_pii_policies": ["person_name", "phone_number", "email_address"],
"redact_pii_sub": "entity_name",
"redact_pii_return_unredacted": True
}
# ...
# After polling completes:
print("Redacted: ", transcription_result["text"])
print("Original: ", transcription_result["unredacted_text"])
```Pass `return_unredacted=True` to `set_redact_pii()`. The transcript object will include `unredacted_text`, `unredacted_words`, and `unredacted_utterances`.```python {11}
config = aai.TranscriptionConfig(
speech_models=["universal-3-pro", "universal-2"],
language_detection=True,
).set_redact_pii(
policies=[
aai.PIIRedactionPolicy.person_name,
aai.PIIRedactionPolicy.phone_number,
aai.PIIRedactionPolicy.email_address,
],
substitution=aai.PIISubstitutionPolicy.entity_name,
return_unredacted=True,
)
transcript = aai.Transcriber().transcribe(audio_file, config)
print("Redacted: ", transcript.text)
print("Original: ", transcript.unredacted_text)
```Set `redact_pii_return_unredacted` to `true` alongside the existing PII parameters. The completed transcript will include `unredacted_text`, `unredacted_words`, and `unredacted_utterances` in addition to the redacted versions.```javascript {6}
const data = {
audio_url: uploadUrl, // You can also use a URL to an audio or video file on the web
redact_pii: true,
redact_pii_policies: ["person_name", "phone_number", "email_address"],
redact_pii_sub: "entity_name",
redact_pii_return_unredacted: true,
};
// ...
// After polling completes:
console.log("Redacted: ", transcriptionResult.text);
console.log("Original: ", transcriptionResult.unredacted_text);
```Set `redact_pii_return_unredacted` to `true` in the transcription config. The transcript object will include `unredacted_text`, `unredacted_words`, and `unredacted_utterances`.```javascript {8}
const params = {
audio: audioFile,
speech_models: ["universal-3-pro", "universal-2"],
language_detection: true,
redact_pii: true,
redact_pii_policies: ["person_name", "phone_number", "email_address"],
redact_pii_sub: "entity_name",
redact_pii_return_unredacted: true,
};
const run = async () => {
const transcript = await client.transcripts.transcribe(params);
console.log("Redacted: ", transcript.text);
console.log("Original: ", transcript.unredacted_text);
};
run();
```### Example response```json
{
"text": "[PERSON_NAME] called from [PHONE_NUMBER]...",
"words": [{ "text": "[PERSON_NAME]", "start": 250, "end": 650, "confidence": 0.98 }],
"utterances": [{ "text": "[PERSON_NAME] called from [PHONE_NUMBER]...", "start": 250, "end": 4820, "speaker": "A" }],
"redact_pii_return_unredacted": true,
"unredacted_text": "Mary called from 555-0123...",
"unredacted_words": [{ "text": "Mary", "start": 250, "end": 650, "confidence": 0.98 }],
"unredacted_utterances": [{ "text": "Mary called from 555-0123...", "start": 250, "end": 4820, "speaker": "A" }]
}
```## API reference### Request```bash {6-13}
curl \
--header "Authorization: " \
--header "Content-Type: application/json" \
--data '{
"audio_url": "YOUR_AUDIO_URL",
"redact_pii": true,
"redact_pii_policies": ["us_social_security_number", "credit_card_number"],
"redact_pii_sub": "hash",
"redact_pii_audio": true,
"redact_pii_audio_quality": "mp3",
"redact_pii_audio_options": {
"override_audio_redaction_method": "silence"
}
}'
```| Key | Type | Description |
| ---------------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `redact_pii` | boolean | Enable PII Redaction. |
| `redact_pii_policies` | array | [PII policies](#pii-policies) for what information to redact. |
| `redact_pii_sub` | string | Method used to substitute PII in the transcript. Can be `entity_name` or `hash`. |
| `redact_pii_audio` | boolean | Create a [redacted version of the audio file](#create-redacted-audio-files). |
| `redact_pii_audio_quality` | string | Quality of the redacted PII audio file. Can be `mp3` or `wav`. |
| `redact_pii_audio_options` | object | Options for PII-redacted audio. See [Create redacted audio files](#create-redacted-audio-files). |
| `redact_pii_audio_options.override_audio_redaction_method` | string | The method used to redact audio. Set to `silence` to replace PII with silence instead of the default beep. |
| `redact_pii_return_unredacted` | boolean | Opt-in. When `true`, [returns the unredacted transcript](#return-the-unredacted-transcript) alongside the redacted one. Requires `redact_pii: true`. Defaults to `false`, in which case only the redacted transcript is returned. |### Response| Key | Type | Description |
| ------ | ------ | ----------------------------- |
| `text` | string | Transcript with redacted PII. |The response also includes the request parameters used to generate the transcript.### Request for Redacted AudioIn the request URL, replace transcript\_id with the ID of the transcript where `redact_pii_audio` is set to `true`.```bash {6-10}
curl \
--header "Authorization: "
```### Response for Redacted Audio| Key | Type | Description |
| -------------------- | ------ | ----------------------------------- |
| `status` | string | The status of the redacted audio. |
| `redacted_audio_url` | string | The URL of the redacted audio file. |### PII policies| Policy name | Description | Example |
| --------------------------- | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| `account_number` | Customer account or membership identification number | `Policy No. 10042992; Member ID: HZ-5235-001` |
| `banking_information` | Banking information, including account and routing numbers | |
| `blood_type` | Blood type | O-, AB positive |
| `credit_card_cvv` | Credit card verification code | CVV: 080 |
| `credit_card_expiration` | Expiration date of a credit card | |
| `credit_card_number` | Credit card number | |
| `date` | Specific calendar date | December 18 |
| `date_interval` | Broader time periods, including date ranges, months, seasons, years, and decades | 2020-2021, 5-9 May, January 1984 |
| `date_of_birth` | Date of birth | Date of Birth: March 7, 1961 |
| `drivers_license` | Driver's license number | DL# 356933-540 |
| `drug` | Medications, vitamins, or supplements | Advil, Acetaminophen, Panadol |
| `duration` | Measurements of time expressed as a numerical value plus a unit | 8 months, 2 years |
| `email_address` | Email address | [support@assemblyai.com](mailto:support@assemblyai.com) |
| `event` | Name of an event or holiday | Olympics, Yom Kippur |
| `filename` | Names of computer files, including the extension or filepath | Taxes/2012/brad-tax-returns.pdf |
| `gender_sexuality` | Terms indicating gender identity or sexual orientation, including slang terms | female, bisexual, trans |
| `healthcare_number` | Healthcare numbers and health plan beneficiary numbers | Policy No.: 5584-486-674-YM |
| `injury` | Bodily injury | I broke my arm, I have a sprained wrist |
| `ip_address` | Internet IP address, including IPv4 and IPv6 formats | 192.168.0.1 |
| `language` | Name of a natural language | Spanish, French |
| `location` | Any Location reference including mailing address, postal code, city, state, province, country, or coordinates. | Lake Victoria, 145 Windsor St., 90210 |
| `marital_status` | Terms indicating marital status | Single, common-law, ex-wife, married |
| `medical_condition` | Name of a medical condition, disease, syndrome, deficit, or disorder | chronic fatigue syndrome, arrhythmia, depression |
| `medical_process` | Medical process, including treatments, procedures, and tests | heart surgery, CT scan |
| `money_amount` | Name and/or amount of currency | 15 pesos, \$94.50 |
| `nationality` | Terms indicating nationality, ethnicity, or race | American, Asian, Caucasian |
| `number_sequence` | Numerical PII (including alphanumeric strings) that doesn't fall under other categories | |
| `occupation` | Job title or profession | professor, actors, engineer, CPA |
| `organization` | Name of an organization | CNN, McDonalds, University of Alaska, Northwest General Hospital |
| `passport_number` | Passport numbers, issued by any country | PA4568332, NU3C6L86S12 |
| `password` | Account passwords, PINs, access keys, or verification answers | 27%alfalfa, temp1234, My mother's maiden name is Smith |
| `person_age` | Number associated with an age | 27, 75 |
| `person_name` | Name of a person | Bob, Doug Jones, Dr. Kay Martinez, MD |
| `phone_number` | Telephone or fax number | |
| `physical_attribute` | Distinctive bodily attributes, including race | I'm 190cm tall |
| `political_affiliation` | Terms referring to a political party, movement, or ideology | Republican, Liberal |
| `religion` | Terms indicating religious affiliation | Hindu, Catholic |
| `statistics` | Medical statistics | 18%, 18 percent |
| `time` | Expressions indicating clock times | 19:37:28, 10pm EST |
| `url` | Internet addresses | |
| `us_social_security_number` | Social Security Number or equivalent | |
| `username` | Usernames, login names, or handles | @AssemblyAI |
| `vehicle_id` | Vehicle identification numbers (VINs), vehicle serial numbers, and license plate numbers | 5FNRL38918B111818, BIF7547 |
| `zodiac_sign` | Names of Zodiac signs | Aries, Taurus |## TroubleshootingMake sure that at least one [PII policy](#pii-policies) has been specified in
your request, using the `redact_pii_policies` parameter. If you're still
experiencing issues, please reach out to our support team for assistance.There could be several reasons why your webhook isn't being sent, such as a
misconfigured URL, an unreachable endpoint, or an issue with the
authentication headers. Double-check your request and ensure that the{" "}
`webhook_url` parameter is included with a valid URL that can be reached by
AssemblyAI's API. If you're using custom authentication headers, ensure that
the `webhook_auth_header_name` and `webhook_auth_header_value` parameters are
included and are correct. If you're still having issues, please contact our
support team for assistance.By default, the API returns redacted audio files in MP3 format, a lossy
format. Lossy formats remove audio information to reduce file size, which may
cause a reduction in quality. The difference may be particularly noticeable if
the submitted audio is in a lossless file format. To retain as much quality as
possible, you can instead return your redacted audio files in a lossless
format, by setting `redact_pii_audio_quality` to `wav`.