Legacy API Reference - AudioShake Developers
Authentication
All requests require a Bearer token in the Authorization header.
Authorization: Bearer YOUR_API_TOKEN
Contact support@audioshake.ai to obtain a legacy API token. Never store tokens in client-side code. If a token is compromised, contact support to invalidate it immediately.
Upload a file
Before creating a job, upload your audio file to receive an asset ID.
Upload from disk
curl -X POST "https://groovy.audioshake.ai/upload" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: multipart/form-data" \
-H "Accept: application/json" \
-F 'file=@song.mp3;type=audio/mpeg'
Upload from URL
curl -X POST "https://groovy.audioshake.ai/upload/link" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"link": "https://example.com/audio.mp3",
"name": "song"
}'
Upload response
{
"name": "song",
"id": "clyxaywtp00ne0jpi4nf435dv",
"fileType": "audio/mpeg",
"format": "mp3",
"link": "https://..."
}
Save the id — you will use it as assetId when creating a job.
Create a job
Each job runs one model against one asset. The model name and output format are specified inside the metadata object.
curl -X POST "https://groovy.audioshake.ai/job" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"metadata": {
"format": "wav",
"name": "vocals"
},
"assetId": "clyxaywtp00ne0jpi4nf435dv",
"callbackUrl": "https://your-app.com/webhooks"
}'
To process multiple models (for example, vocals + instrumental + drums), submit a separate job for each.
Job request fields
| Field | Description |
|---|---|
metadata.name |
Model name (for example, vocals, instrumental, music_detection) |
metadata.format |
Output file format: wav, mp3, or json |
assetId |
Asset ID returned from file upload |
callbackUrl |
Optional. URL to receive a webhook when the job completes |
Job response
{
"job": {
"id": "<job-id>",
"clientId": "<your-client-id>",
"requestId": "<request-id>",
"metadata": {
"format": "wav",
"name": "vocals"
},
"assetId": "clyxaywtp00ne0jpi4nf435dv",
"status": "queued"
}
}
Save the job.id to poll for status.
Check job status
curl -X GET "https://groovy.audioshake.ai/job/<job-id>" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
When status is completed, the response includes an outputAssets array with download links.
Music detection
The music_detection model returns a JSON array of time ranges where music is present.
curl -X POST "https://groovy.audioshake.ai/job" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"metadata": {
"format": "json",
"name": "music_detection"
},
"assetId": "<asset-id>"
}'
Output format:
[\
{\
"start_time": 20.0,\
"end_time": 30.0,\
"confidence": 0.179\
}\
]
Confidence values closer to 1 indicate higher certainty that music is present.
Check usage
curl -X GET "https://groovy.audioshake.ai/usage" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Returns the last 3 months of usage:
{
"clientId": "<your-client-id>",
"usage": [\
{\
"month": "2026-03",\
"totalJobs": 412,\
"totalMinutes": 823.5\
}\
]
}
Migrating to the Tasks API
See Migrating from Jobs for a step-by-step guide.