On this section
Clean Audio
Submit a clean audio job
Start an asynchronous job that removes background noise from a speech recording — the same model that powers Clean Audio in the VEED editor.
Inputs
audio_url— public URL of the recording; any audio or video file, up to 30 minutes and 512 MBstrength— optional; how much of the original may remain under speech, between0and1. Lower keeps more room tone behind the voicetarget_lufs— optional; the output's integrated loudness, between-40and-8LUFSnormalize_loudness— optional;falsekeeps the input level instead of normalizing itoutput_format— optional;flacorwav, both 48 kHz mono 16-bit
What happens next
The job is accepted immediately — you get 202 Accepted with a job_id and status PROCESSING. Processing takes roughly 0.2–0.5× the audio's duration; poll GET /v1/clean-audio/{job_id} until the job is COMPLETED or FAILED.
Headers
X-Veed-Store-IOenumoptionalSet to 0 to not store this request's and response's bodies. They are then not available in your request logs for debugging.
01Defaults to "1".X-Veed-Media-Expiration-SecondsintegeroptionalNumber of seconds before the media URLs returned for this request expire. A value above the maximum is capped rather than rejected.
86400.Request body CleanAudioInput ↗
audio_urlurlrequiredURL of the recording to clean: any audio or video file, up to 30 minutes and 512 MB. A video's audio track is used; multi-channel audio is mixed down to mono.
normalize_loudnessbooleanoptionalSet to false to skip loudness normalization and keep the input level.
true.output_formatenumoptionalContainer for the 48 kHz mono 16-bit output. FLAC is lossless at about half the size of WAV.
flacwavDefaults to "flac".strengthnumberoptionalHow much of the original is allowed to remain under speech: the suppression floor is 1 - strength. Lower keeps more room tone behind the voice; silence between words is always fully cleaned.
0.874.target_lufsnumberoptionalIntegrated loudness of the output in LUFS (ITU-R BS.1770); true peak is capped at -1.1 dBTP. Ignored when normalize_loudness is false. A null reads as omitted: set normalize_loudness to false to skip normalization.
-19.Responses
Show 6 nested fields
credits_chargedintegeroptionalCredits charged for the job. Present once the job is COMPLETED and the final charge is known.
credits_estimatedintegeroptionalCredits quoted before the job ran. Present only on the response that created the job. This is an estimate, not the price: the charged amount can be higher or lower.
Failure information. Present once the job has FAILED.
Show 3 nested fields
codeenumrequiredStable, machine-readable failure code for this job type.
input_validationcontent_moderationinvalid_fileaudio_too_longtransload_failedgeneration_failedtimeoutOptional structured failure details.
Show 3 nested fields
fieldstringoptionalDotted path to the offending input, when applicable.
messagestringrequiredHuman-readable explanation of this detail.
typestringrequiredThe category of this detail entry.
messagestringrequiredHuman-readable failure message.
job_iduuidrequiredStable identifier of the job and of the resource it produces.
The produced resource. Present once the job is COMPLETED.
Show 1 nested field
The denoised recording: 48 kHz mono, the same duration as the input.
Show 4 nested fields
content_typestringoptionalThe mime type of the file.
file_namestringoptionalThe name of the file.
file_sizeintegeroptionalThe size of the file in bytes.
urlstringrequiredThe URL where the file can be downloaded from.
statusenumrequiredCurrent lifecycle state of the job.
PROCESSINGCOMPLETEDFAILEDCANCELLEDX-Request-IDCorrelation id for this request, adopted from the request or minted at the edge.401UnauthorizedErrorResponse ↗
Show 4 nested fields
codeenumrequiredinvalid_requestunauthenticatedinsufficient_tokenspermission_deniednot_foundconflictrate_limitedunavailableinternalShow 6 nested fields
fieldstringoptionalmessagestringoptionalreasonenumoptionalapi_key_expiredapi_key_inactiveapi_key_invalidapi_key_revokedapi_key_workspace_unavailableinsufficient_creditsjob_not_foundoauth_token_invalidretry_after_msintegeroptionaltypestringrequiredvalueobjectoptionalmessagestringrequiredrequest_idstringrequiredX-Request-IDCorrelation id for this request, adopted from the request or minted at the edge.402Payment RequiredErrorResponse ↗
Show 4 nested fields
codeenumrequiredinvalid_requestunauthenticatedinsufficient_tokenspermission_deniednot_foundconflictrate_limitedunavailableinternalShow 6 nested fields
fieldstringoptionalmessagestringoptionalreasonenumoptionalapi_key_expiredapi_key_inactiveapi_key_invalidapi_key_revokedapi_key_workspace_unavailableinsufficient_creditsjob_not_foundoauth_token_invalidretry_after_msintegeroptionaltypestringrequiredvalueobjectoptionalmessagestringrequiredrequest_idstringrequiredX-Request-IDCorrelation id for this request, adopted from the request or minted at the edge.422Unprocessable EntityErrorResponse ↗
Show 4 nested fields
codeenumrequiredinvalid_requestunauthenticatedinsufficient_tokenspermission_deniednot_foundconflictrate_limitedunavailableinternalShow 6 nested fields
fieldstringoptionalmessagestringoptionalreasonenumoptionalapi_key_expiredapi_key_inactiveapi_key_invalidapi_key_revokedapi_key_workspace_unavailableinsufficient_creditsjob_not_foundoauth_token_invalidretry_after_msintegeroptionaltypestringrequiredvalueobjectoptionalmessagestringrequiredrequest_idstringrequiredX-Request-IDCorrelation id for this request, adopted from the request or minted at the edge.429Rate limit exceededErrorResponse ↗
Show 4 nested fields
codeenumrequiredinvalid_requestunauthenticatedinsufficient_tokenspermission_deniednot_foundconflictrate_limitedunavailableinternalShow 6 nested fields
fieldstringoptionalmessagestringoptionalreasonenumoptionalapi_key_expiredapi_key_inactiveapi_key_invalidapi_key_revokedapi_key_workspace_unavailableinsufficient_creditsjob_not_foundoauth_token_invalidretry_after_msintegeroptionaltypestringrequiredvalueobjectoptionalmessagestringrequiredrequest_idstringrequiredRetry-AfterSeconds until the rate limit resets.X-RateLimit-ClassThe rate-limit class that was hit (read, mutation, ai-generation).X-RateLimit-LimitRequest budget for the matched class.X-RateLimit-RemainingRemaining requests in the current window.X-RateLimit-ResetUnix time (seconds) when the budget resets.X-Request-IDCorrelation id for this request, adopted from the request or minted at the edge.500Internal Server ErrorErrorResponse ↗
Show 4 nested fields
codeenumrequiredinvalid_requestunauthenticatedinsufficient_tokenspermission_deniednot_foundconflictrate_limitedunavailableinternalShow 6 nested fields
fieldstringoptionalmessagestringoptionalreasonenumoptionalapi_key_expiredapi_key_inactiveapi_key_invalidapi_key_revokedapi_key_workspace_unavailableinsufficient_creditsjob_not_foundoauth_token_invalidretry_after_msintegeroptionaltypestringrequiredvalueobjectoptionalmessagestringrequiredrequest_idstringrequiredX-Request-IDCorrelation id for this request, adopted from the request or minted at the edge.Example request
curl -X POST "https://api.veed.io/v1/clean-audio" \
-H "Authorization: Bearer $VEED_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"audio_url": "https://static-assets.veed.io/api-examples/clean-audio-input.m4a"
}'import { Veed } from "@veedstudio/sdk";
const client = new Veed(); // reads VEED_API_KEY
const job = await client.cleanAudio.submit({
audio_url: "https://static-assets.veed.io/api-examples/clean-audio-input.m4a",
});
console.log(job.status);package main
import (
"context"
"fmt"
"log"
veed "github.com/veedstudio/veed-sdk-go"
)
func main() {
client, err := veed.NewClient() // reads VEED_API_KEY
if err != nil {
log.Fatal(err)
}
job, err := client.CleanAudio.Submit(context.Background(), veed.CleanAudioInput{
AudioURL: "https://static-assets.veed.io/api-examples/clean-audio-input.m4a",
})
if err != nil {
log.Fatal(err)
}
fmt.Println(job.Status)
}Example response
{
"data": {
"credits_charged": 0,
"credits_estimated": 0,
"error": {
"code": "input_validation",
"details": [
{
"field": "<field>",
"message": "<message>",
"type": "<type>"
}
],
"message": "<message>"
},
"job_id": "123e4567-e89b-12d3-a456-426614174000",
"result": {
"audio": {
"content_type": "video/mp4",
"file_name": "<file_name>",
"file_size": 0,
"url": "<url>"
}
},
"status": "PROCESSING"
}
}