Docs
BeatSync API documentation
BeatSync API accepts direct audio uploads and returns BPM, beat timestamps,
downbeats, and cut points. Public requests use multipart/form-data
with one file field. Files are limited to
10 MiB and 120 seconds.
curl --request POST \
--url https://beatsyncapi.p.rapidapi.com/v1/analyze-sync \
--header "X-RapidAPI-Key: $RAPIDAPI_KEY" \
--header "X-RapidAPI-Host: beatsyncapi.p.rapidapi.com" \
--form "file=@/path/to/clip.mp3;type=audio/mpeg" Endpoint
| Method | POST |
|---|---|
| Path | /v1/analyze-sync |
| Auth | RapidAPI headers: X-RapidAPI-Key and X-RapidAPI-Host |
| Content type | multipart/form-data |
Multipart upload
curl --request POST \
--url https://beatsyncapi.p.rapidapi.com/v1/analyze-sync \
--header "X-RapidAPI-Key: $RAPIDAPI_KEY" \
--header "X-RapidAPI-Host: beatsyncapi.p.rapidapi.com" \
--form "file=@/path/to/clip.mp3;type=audio/mpeg" - Use the form field name
file. - The file must be 10 MiB or smaller and no longer than 120 seconds.
- Uploads are temporarily stored for analysis; processing services receive only an internal file reference.
Successful response
{
"duration": 34.12,
"bpm": 99.4,
"beats": [
{
"time": 0.61
},
{
"time": 1.22
}
],
"downbeats": [
{
"time": 0.61,
"bar": 1
}
],
"cut_points": [
{
"time": 4.84,
"score": 0.88,
"type": "strong"
}
],
"cut_points_by_style": {},
"meta": {
"task_id": "atsk_...",
"request_id": "req_...",
"processing_ms": 2841,
"audio_duration": 34.12,
"schema_version": "1.0",
"engine_version": "beat-this-final0"
}
}
Times are in seconds. cut_points is always the core, default
downbeat-oriented list. cut_points_by_style is an independent
extension map and remains empty until a style is implemented and documented.
Error examples
Request validation error
{
"error": {
"code": "invalid_request",
"message": "Multipart upload requires a file field named file."
}
} {
"error": {
"code": "file_too_large",
"message": "Uploaded audio file exceeds the 10 MiB limit."
}
} Analysis error
{
"error": {
"code": "AUDIO_TOO_LONG",
"message": "Audio duration exceeds the 120 second limit for synchronous analysis.",
"request_id": "req_..."
}
} Timeout or service unavailable
{
"error": {
"code": "ANALYSIS_TIMEOUT",
"message": "Analysis did not finish before the synchronous response timeout.",
"request_id": "req_..."
},
"task_id": "atsk_..."
} | Status | Meaning |
|---|---|
400 | Invalid, missing, unsupported, or too-long input. |
403 | Missing or invalid RapidAPI credentials. |
413 | Multipart body or uploaded audio file is too large. |
415 | Public requests must use multipart upload. |
429 | Plan quota or rate limit exceeded. |
500/503/504 | Service failure, unavailability, or timeout. |
Plan limits
| Plan | Launch configuration | Max audio | Billing guardrail |
|---|---|---|---|
| Basic | Confirm on RapidAPI | 10 MiB / 120 seconds | Hard Limit, no overage |
| Pro | $25/month · 300 requests · 2/minute (provisional) | 10 MiB / 120 seconds | Hard Limit, no overage |
Basic and Pro use the same request and response schema. Pro values are the current launch target; confirm the RapidAPI checkout values before subscribing.