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"

Open the canonical OpenAPI 3.1 specification.

Endpoint

MethodPOST
Path/v1/analyze-sync
AuthRapidAPI headers: X-RapidAPI-Key and X-RapidAPI-Host
Content typemultipart/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_..."
}
StatusMeaning
400Invalid, missing, unsupported, or too-long input.
403Missing or invalid RapidAPI credentials.
413Multipart body or uploaded audio file is too large.
415Public requests must use multipart upload.
429Plan quota or rate limit exceeded.
500/503/504Service failure, unavailability, or timeout.

Plan limits

PlanLaunch configurationMax audioBilling guardrail
BasicConfirm on RapidAPI10 MiB / 120 secondsHard Limit, no overage
Pro$25/month · 300 requests · 2/minute (provisional)10 MiB / 120 secondsHard 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.