# A complete program that also waits for the result and downloads it:
# https://docs.soundpiece.co/guides/adapt/auto_cut_down
# One key per job: keep it, and send the same key if you retry.
IDEMPOTENCY_KEY=$(uuidgen)
curl --request PUT \
--url https://api.soundpiece.co/v1/adapt.auto_cut_down \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"idempotency_key": "$IDEMPOTENCY_KEY",
"source": {
"url": "https://example.com/audio/song.mp3"
},
"target_duration": 30.0
}
EOF# A complete program that also waits for the result and downloads it:
# https://docs.soundpiece.co/guides/adapt/auto_cut_down
import uuid
import requests
url = "https://api.soundpiece.co/v1/adapt.auto_cut_down"
# One key per job: keep it, and send the same key if you retry.
idempotency_key = str(uuid.uuid4())
payload = {
"idempotency_key": idempotency_key,
"source": {
"url": "https://example.com/audio/song.mp3",
},
"target_duration": 30.0,
}
headers = {"Authorization": "Bearer <token>"}
response = requests.put(url, json=payload, headers=headers, timeout=30)
print(response.json())// A complete program that also waits for the result and downloads it:
// https://docs.soundpiece.co/guides/adapt/auto_cut_down
import { randomUUID } from "node:crypto";
// One key per job: keep it, and send the same key if you retry.
const idempotencyKey = randomUUID();
const response = await fetch("https://api.soundpiece.co/v1/adapt.auto_cut_down", {
method: "PUT",
headers: {Authorization: "Bearer <token>", "Content-Type": "application/json"},
body: JSON.stringify({
idempotency_key: idempotencyKey,
source: {
url: "https://example.com/audio/song.mp3",
},
target_duration: 30.0,
}),
});
console.log(await response.json());{
"auto_cut": {
"id": "op_01m3vcs7e0f8rsq32d5sqhmetw",
"status": "processing",
"created_at": "2026-10-01T09:30:00Z",
"idempotency_key": "3f2b8c1e-9d4a-4e7b-b6c5-1a2d3e4f5a6b",
"target_duration": 15,
"loudness": {
"target_lufs": -14,
"allow_compression": true
},
"output": null,
"error": null
}
}adapt.auto_cut_down (submit)
Submit an auto-cut request.
Returns immediately with status: processing. Use the matching GET to
poll for completion, or supply a callback_url to receive a webhook.
Auto-cut trims a longer audio source to a target duration, choosing
musically natural cut points. The output duration may be slightly shorter
or longer than target_duration to land on a natural boundary.
target_duration is a target, not an exact length. Its absolute bounds — at
least 5 seconds and at most 5 minutes — are checked up front (422). It must
also be at most twice the source duration; since the source duration is only
known after ingestion, exceeding that surfaces asynchronously as a failed
operation with target_duration_too_long. The source must be fetchable,
decodable audio within the supported format/size limits and at least 2.5
seconds long (half the minimum target), else a source_* error — validated
once the source is fetched and decoded (see errors).
Add the optional loudness block to have the cut normalised to a target
integrated loudness, given in LUFS or as a named preset (streaming,
podcast or broadcast), at no extra cost — see loudness.
Credits cost: 1 per request. Insufficient credits returns 402 — see
errors.
# A complete program that also waits for the result and downloads it:
# https://docs.soundpiece.co/guides/adapt/auto_cut_down
# One key per job: keep it, and send the same key if you retry.
IDEMPOTENCY_KEY=$(uuidgen)
curl --request PUT \
--url https://api.soundpiece.co/v1/adapt.auto_cut_down \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"idempotency_key": "$IDEMPOTENCY_KEY",
"source": {
"url": "https://example.com/audio/song.mp3"
},
"target_duration": 30.0
}
EOF# A complete program that also waits for the result and downloads it:
# https://docs.soundpiece.co/guides/adapt/auto_cut_down
import uuid
import requests
url = "https://api.soundpiece.co/v1/adapt.auto_cut_down"
# One key per job: keep it, and send the same key if you retry.
idempotency_key = str(uuid.uuid4())
payload = {
"idempotency_key": idempotency_key,
"source": {
"url": "https://example.com/audio/song.mp3",
},
"target_duration": 30.0,
}
headers = {"Authorization": "Bearer <token>"}
response = requests.put(url, json=payload, headers=headers, timeout=30)
print(response.json())// A complete program that also waits for the result and downloads it:
// https://docs.soundpiece.co/guides/adapt/auto_cut_down
import { randomUUID } from "node:crypto";
// One key per job: keep it, and send the same key if you retry.
const idempotencyKey = randomUUID();
const response = await fetch("https://api.soundpiece.co/v1/adapt.auto_cut_down", {
method: "PUT",
headers: {Authorization: "Bearer <token>", "Content-Type": "application/json"},
body: JSON.stringify({
idempotency_key: idempotencyKey,
source: {
url: "https://example.com/audio/song.mp3",
},
target_duration: 30.0,
}),
});
console.log(await response.json());{
"auto_cut": {
"id": "op_01m3vcs7e0f8rsq32d5sqhmetw",
"status": "processing",
"created_at": "2026-10-01T09:30:00Z",
"idempotency_key": "3f2b8c1e-9d4a-4e7b-b6c5-1a2d3e4f5a6b",
"target_duration": 15,
"loudness": {
"target_lufs": -14,
"allow_compression": true
},
"output": null,
"error": null
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
A unique UUID you choose. Send the same key to retry safely; we'll return the original response without doing the work again.
"3f2b8c1e-9d4a-4e7b-b6c5-1a2d3e4f5a6b"
The audio source to operate on.
Show child attributes
Show child attributes
The desired output duration in seconds. This is a target, not an exact length — the result may be slightly shorter or longer to land on a natural cut point. Must be between 5 seconds and 5 minutes (enforced up front; out of range is a 422), and at most twice the source duration. Because the source duration is only known after the source is fetched and decoded, exceeding twice the source surfaces asynchronously as a failed operation with target_duration_too_long. See errors.
5 <= x <= 300Optional HTTPS URL we'll POST the final response to when the operation reaches ready or failed. Polling remains the canonical source of truth; webhooks are a best-effort latency optimisation.
1 - 2048"https://example.com/webhooks/soundpiece"
A target loudness to normalise audio to. Every field has a default, so
{} asks for the defaults: -14 LUFS, compression allowed.
- Target
- Preset
Show child attributes
Show child attributes
Response
Successful Response
Show child attributes
Show child attributes
