API
On this section
View as Markdown ↗

Clean Audio

Submit a clean audio job

audio
produces
audio
$0.0125per minute

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 MB
  • strength — optional; how much of the original may remain under speech, between 0 and 1. Lower keeps more room tone behind the voice
  • target_lufs — optional; the output's integrated loudness, between -40 and -8 LUFS
  • normalize_loudness — optional; false keeps the input level instead of normalizing it
  • output_format — optional; flac or wav, 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.

POST
/v1/clean-audio
Try it ▷

Headers

X-Veed-Store-IOenumoptional

Set to 0 to not store this request's and response's bodies. They are then not available in your request logs for debugging.

Accepts01Defaults to "1".
X-Veed-Media-Expiration-Secondsintegeroptional

Number of seconds before the media URLs returned for this request expire. A value above the maximum is capped rather than rejected.

At most 2592000.Defaults to 86400.

Request body CleanAudioInput ↗

audio_urlurlrequired

URL 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.

Must be an http(s) URL.
normalize_loudnessbooleanoptional

Set to false to skip loudness normalization and keep the input level.

Defaults to true.
output_formatenumoptional

Container for the 48 kHz mono 16-bit output. FLAC is lossless at about half the size of WAV.

AcceptsflacwavDefaults to "flac".
strengthnumberoptional

How 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.

Between 0 and 1.Defaults to 0.874.
target_lufsnumberoptional

Integrated 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.

Between -40 and -8.Defaults to -19.

Responses

dataobjectrequiredCleanAudioJob ↗
Show 6 nested fields
credits_chargedintegeroptional

Credits charged for the job. Present once the job is COMPLETED and the final charge is known.

credits_estimatedintegeroptional

Credits 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
codeenumrequired

Stable, machine-readable failure code for this job type.

Acceptsinput_validationcontent_moderationinvalid_fileaudio_too_longtransload_failedgeneration_failedtimeout
detailsarray of objectoptionalJobErrorDetail ↗

Optional structured failure details.

Show 3 nested fields
fieldstringoptional

Dotted path to the offending input, when applicable.

messagestringrequired

Human-readable explanation of this detail.

typestringrequired

The category of this detail entry.

messagestringrequired

Human-readable failure message.

job_iduuidrequired

Stable identifier of the job and of the resource it produces.

resultobjectoptionalCleanAudio ↗

The produced resource. Present once the job is COMPLETED.

Show 1 nested field
audioobjectrequiredFile ↗

The denoised recording: 48 kHz mono, the same duration as the input.

Show 4 nested fields
content_typestringoptional

The mime type of the file.

file_namestringoptional

The name of the file.

file_sizeintegeroptional

The size of the file in bytes.

urlstringrequired

The URL where the file can be downloaded from.

statusenumrequired

Current lifecycle state of the job.

AcceptsPROCESSINGCOMPLETEDFAILEDCANCELLED
X-Request-IDCorrelation id for this request, adopted from the request or minted at the edge.
401UnauthorizedErrorResponse ↗
errorobjectrequiredErrorBody ↗
Show 4 nested fields
codeenumrequired
Acceptsinvalid_requestunauthenticatedinsufficient_tokenspermission_deniednot_foundconflictrate_limitedunavailableinternal
detailsarray of objectoptionalErrorDetail ↗
Show 6 nested fields
fieldstringoptional
messagestringoptional
reasonenumoptional
Acceptsapi_key_expiredapi_key_inactiveapi_key_invalidapi_key_revokedapi_key_workspace_unavailableinsufficient_creditsjob_not_foundoauth_token_invalid
retry_after_msintegeroptional
typestringrequired
valueobjectoptional
messagestringrequired
request_idstringrequired
X-Request-IDCorrelation id for this request, adopted from the request or minted at the edge.
402Payment RequiredErrorResponse ↗
errorobjectrequiredErrorBody ↗
Show 4 nested fields
codeenumrequired
Acceptsinvalid_requestunauthenticatedinsufficient_tokenspermission_deniednot_foundconflictrate_limitedunavailableinternal
detailsarray of objectoptionalErrorDetail ↗
Show 6 nested fields
fieldstringoptional
messagestringoptional
reasonenumoptional
Acceptsapi_key_expiredapi_key_inactiveapi_key_invalidapi_key_revokedapi_key_workspace_unavailableinsufficient_creditsjob_not_foundoauth_token_invalid
retry_after_msintegeroptional
typestringrequired
valueobjectoptional
messagestringrequired
request_idstringrequired
X-Request-IDCorrelation id for this request, adopted from the request or minted at the edge.
422Unprocessable EntityErrorResponse ↗
errorobjectrequiredErrorBody ↗
Show 4 nested fields
codeenumrequired
Acceptsinvalid_requestunauthenticatedinsufficient_tokenspermission_deniednot_foundconflictrate_limitedunavailableinternal
detailsarray of objectoptionalErrorDetail ↗
Show 6 nested fields
fieldstringoptional
messagestringoptional
reasonenumoptional
Acceptsapi_key_expiredapi_key_inactiveapi_key_invalidapi_key_revokedapi_key_workspace_unavailableinsufficient_creditsjob_not_foundoauth_token_invalid
retry_after_msintegeroptional
typestringrequired
valueobjectoptional
messagestringrequired
request_idstringrequired
X-Request-IDCorrelation id for this request, adopted from the request or minted at the edge.
429Rate limit exceededErrorResponse ↗
errorobjectrequiredErrorBody ↗
Show 4 nested fields
codeenumrequired
Acceptsinvalid_requestunauthenticatedinsufficient_tokenspermission_deniednot_foundconflictrate_limitedunavailableinternal
detailsarray of objectoptionalErrorDetail ↗
Show 6 nested fields
fieldstringoptional
messagestringoptional
reasonenumoptional
Acceptsapi_key_expiredapi_key_inactiveapi_key_invalidapi_key_revokedapi_key_workspace_unavailableinsufficient_creditsjob_not_foundoauth_token_invalid
retry_after_msintegeroptional
typestringrequired
valueobjectoptional
messagestringrequired
request_idstringrequired
Retry-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 ↗
errorobjectrequiredErrorBody ↗
Show 4 nested fields
codeenumrequired
Acceptsinvalid_requestunauthenticatedinsufficient_tokenspermission_deniednot_foundconflictrate_limitedunavailableinternal
detailsarray of objectoptionalErrorDetail ↗
Show 6 nested fields
fieldstringoptional
messagestringoptional
reasonenumoptional
Acceptsapi_key_expiredapi_key_inactiveapi_key_invalidapi_key_revokedapi_key_workspace_unavailableinsufficient_creditsjob_not_foundoauth_token_invalid
retry_after_msintegeroptional
typestringrequired
valueobjectoptional
messagestringrequired
request_idstringrequired
X-Request-IDCorrelation id for this request, adopted from the request or minted at the edge.

Example request

terminal
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"
}'

Example response

HTTP 202
{
  "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"
  }
}