API reference · v0.1.0

AudioKit API

API-first audio intelligence for creators, labels and agents.

This page is generated from the API's OpenAPI 3.1.0 contract, which the API's own tests check against the server. Download it as openapi.yaml to generate clients and types. New to AudioKit? Start with Get started.

Basics

Base URLhttps://api-production-cd43.up.railway.app
Authentication

An AudioKit API key, e.g. ak_.... Only its sha256 is stored server-side.

Send it as Authorization: Bearer <api key>.

Errors

Refused requests return Error: {"error": {"code": "…", "message": "…"}}. Failed jobs carry a JobError. New codes may be added: treat a code you don't recognise as internal.

Endpoints

GET /v1/health

Liveness and versionNo API key

Responses

StatusMeaningBody
200

The service is up.

Health

GET /v1/capabilities

Operations that work end to end on this instanceNo API key

transcode and preview are left out when the instance has no ffmpeg, and tags when it has no tag model (AUDIOKIT_MODELS_DIR).

Responses

StatusMeaningBody
200

The operations you can submit.

Capabilities

GET /v1/openapi.yaml

This contractNo API key

Responses

StatusMeaningBody
200

The OpenAPI document for this AudioKit version.

application/yaml

POST /v1/jobs

Submit a jobAPI key

job_id is yours and doubles as the idempotency key. Resubmitting the same request returns the existing job with 200; the same job_id with a different request is a 409. Each client's job_ids are separate from every other client's.

URLs must be https and resolve to public addresses, including after redirects.

Request body: JobRequest

FieldTypeNotes
job_idstring

Yours, and the idempotency key. 1–200 printable ASCII characters, no spaces.

pattern ^[!-~]{1,200}$

operationOperation
  • probe: decode the whole file and report its container, codec, format and duration
  • loudness: EBU R128 integrated loudness, loudness range, true peak and sample peak
  • waveform: a peak envelope for drawing a waveform
  • transcode: convert to WAV, FLAC, MP3 or AAC; writes the audio output
  • preview: a short excerpt with fades; writes the audio output
  • tempo: BPM and beat grid
  • key: musical key, Camelot code and tuning
  • fingerprint: a Chromaprint fingerprint for AcoustID
  • analyze: loudness, tempo, key, fingerprint and (with a tag model) tags from one read of the file
  • tags: genre, mood and vocal tags from a CLAP audio model
inputInputFile
paramsoptionalobject or null

Settings for the operation; see the matching *Params schema. Unknown keys are rejected.

outputsoptionalmap of OutputTarget

An upload target for each output the operation writes, and no others.

webhookoptionalWebhookTarget
authorizationoptionalAuthorizationRef
Measure loudnessrequest body
{
  "job_id": "job-0193",
  "operation": "loudness",
  "input": {
    "url": "https://storage.example.com/master.wav?signature=abc",
    "sha256": "837d2e9c0f1a4b5c6d7e8f9012a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5",
    "filename": "master.wav"
  },
  "webhook": {
    "url": "https://example.com/audiokit/webhook"
  },
  "authorization": {
    "decision_id": "dec_42",
    "purpose": "analysis"
  }
}
Loudness, tempo, key and fingerprint in one jobrequest body
{
  "job_id": "job-0195",
  "operation": "analyze",
  "input": {
    "url": "https://storage.example.com/master.wav?signature=abc",
    "sha256": "837d2e9c0f1a4b5c6d7e8f9012a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5"
  },
  "params": {
    "min_bpm": 110,
    "max_bpm": 150
  },
  "webhook": {
    "url": "https://example.com/audiokit/webhook"
  }
}
Make a 30-second MP3 previewrequest body
{
  "job_id": "job-0194",
  "operation": "preview",
  "input": {
    "url": "https://storage.example.com/master.wav?signature=abc",
    "sha256": "837d2e9c0f1a4b5c6d7e8f9012a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5"
  },
  "params": {
    "duration_seconds": 30
  },
  "outputs": {
    "audio": {
      "url": "https://storage.example.com/upload/preview.mp3?signature=def",
      "headers": {
        "x-upsert": "true"
      }
    }
  },
  "webhook": {
    "url": "https://example.com/audiokit/webhook"
  }
}

Responses

StatusMeaningBody
200

The same request was already submitted; this is that job.

Job
202

A new job was queued.

Job
401

unauthorized: missing or unknown API key.

Error
409

idempotency_conflict: this job_id was already used with a different request.

Error
422

invalid_request: the body, a URL or params is invalid. operation_unavailable: this instance can't run the operation (no ffmpeg or no tag model).

Error
503

unavailable: storage is unavailable; retry.

Error

GET /v1/jobs/{provider_job_id}

Job status and resultAPI key

Always has the final state, even if webhook delivery gave up.

Parameters

NameInNotes
provider_job_idpath

The job ID AudioKit returned. Anything that isn't one of your jobs is a 404.

string (uuid)

Responses

StatusMeaningBody
200

The job.

Job
401

unauthorized: missing or unknown API key.

Error
404

not_found: no such job for this client.

Error
503

unavailable: storage is unavailable; retry.

Error

POST /v1/jobs/{provider_job_id}/cancel

Cancel a jobAPI key

Parameters

NameInNotes
provider_job_idpath

The job ID AudioKit returned. Anything that isn't one of your jobs is a 404.

string (uuid)

Responses

StatusMeaningBody
200

Canceled, or it had already finished; the job is in its final state.

Job
202

The job is running and has been asked to stop. A job.canceled webhook follows.

Job
401

unauthorized: missing or unknown API key.

Error
404

not_found: no such job for this client.

Error
503

unavailable: storage is unavailable; retry.

Error

Operations

Set operation in the job request to one of these. GET /v1/capabilities lists the ones the server can run right now; others are refused with 422 operation_unavailable. Params are checked strictly: unknown keys are a 422.

probe

Decode the whole file and report its container, codec, format and duration.

Writes no files: send no outputs.

Params: NoParams optional

probe, loudness, key and fingerprint take no params.

Send no params, or null.

Result: ProbeResult

FieldTypeNotes
containerstring

e.g. wave, flac, mp3

codecstring
sample_rateinteger
channelsinteger
bits_per_sampleinteger or null
framesinteger
duration_secondsnumber
size_bytesinteger
decode_errorsinteger
validboolean

True when the whole file decoded without errors.

loudness

EBU R128 integrated loudness, loudness range, true peak and sample peak.

Writes no files: send no outputs.

Params: NoParams optional

probe, loudness, key and fingerprint take no params.

Send no params, or null.

Result: LoudnessResult

FieldTypeNotes
integrated_lufsDecibels

Rounded to 0.01. null for silence.

loudness_range_luDecibels

Rounded to 0.01. null for silence.

true_peak_dbtpDecibels

Rounded to 0.01. null for silence.

sample_peak_dbfsDecibels

Rounded to 0.01. null for silence.

sample_rateinteger
channelsinteger
duration_secondsnumber

waveform

A peak envelope for drawing a waveform.

Writes no files: send no outputs.

Params: WaveformParams optional

FieldTypeNotes
pointsoptionalinteger

default 1000 · 10–10000

Result: WaveformResult

FieldTypeNotes
pointsinteger
peaksarray of number

Largest absolute sample in each slice, 0–1.

sample_rateinteger
channelsinteger
duration_secondsnumber

transcode

Convert to WAV, FLAC, MP3 or AAC; writes the audio output.

Needs an upload target in outputs for: audio. See OutputTarget.

Params: TranscodeParams

Cover art and other non-audio streams are dropped; tags are kept. bit_depth is for WAV and FLAC only; bitrate_kbps for MP3 and AAC only. MP3 goes up to 48000 Hz.

FieldTypeNotes
formatFormat

AAC is written as .m4a (MP4 container, audio/mp4).

sample_rateoptionalSampleRate

Default the input's.

channelsoptional1 | 2

Default the input's.

bit_depthoptional16 | 24

default 24

bitrate_kbpsoptionalinteger

Default 320 for MP3

64–320

Result: TranscodeResult

FieldTypeNotes
outputsobject

preview

A short excerpt with fades; writes the audio output.

Needs an upload target in outputs for: audio. See OutputTarget.

Params: PreviewParams optional

FieldTypeNotes
start_secondsoptionalnumber

Default a third of the way in, moved earlier so the excerpt fits.

≥ 0

duration_secondsoptionalnumber

default 30 · 5–120

fade_secondsoptionalnumber

Fade in and out. At most half of duration_seconds.

default 1 · 0–10

formatoptionalFormat

AAC is written as .m4a (MP4 container, audio/mp4).

default "mp3"

bitrate_kbpsoptionalinteger

MP3 and AAC only.

default 192 · 64–320

Result: PreviewResult

FieldTypeNotes
outputsobject

tempo

BPM and beat grid.

Writes no files: send no outputs.

Params: TempoParams optional

The BPM search range for tempo and analyze. It also settles half- and double-time: a track is reported at the tempo inside the range. max_bpm must be at least 10 above min_bpm.

FieldTypeNotes
min_bpmoptionalnumber

default 70 · 40–300

max_bpmoptionalnumber

default 180 · 40–300

Result: TempoResult

FieldTypeNotes
bpmnumber or null

Rounded to 0.01.

confidencenumber or null

0–1

steadyboolean

True when the tempo holds for the whole track.

beat_countinteger

≥ 0

beatsarray of number

Beat times in seconds from the start, rounded to 0.001.

sample_rateinteger
channelsinteger
duration_secondsnumber

key

Musical key, Camelot code and tuning.

Writes no files: send no outputs.

Params: NoParams optional

probe, loudness, key and fingerprint take no params.

Send no params, or null.

Result: KeyResult

FieldTypeNotes
keyKeyName or null
tonicC | C# | D | Eb | E | F | F# | G | Ab | A | Bb | B or null
modemajor | minor or null
camelotCamelot or null
confidencenumber or null
tuning_centsnumber or null

How far the track sits from A440

candidatesarray of object

The top keys, best first.

at most 3 items

chromaarray of number or null
sample_rateinteger
channelsinteger
duration_secondsnumber

fingerprint

A Chromaprint fingerprint for AcoustID.

Writes no files: send no outputs.

Params: NoParams optional

probe, loudness, key and fingerprint take no params.

Send no params, or null.

Result: FingerprintResult

FieldTypeNotes
fingerprintstring or null

AcoustID-compatible Chromaprint of the first 120 seconds, compressed and base64url encoded (no padding), like fpcalc prints. null if the audio is too short.

algorithm"chromaprint-2"
fingerprint_secondsnumber

Seconds of audio fingerprinted.

≥ 0

sample_rateinteger
channelsinteger
duration_secondsnumber

analyze

Loudness, tempo, key, fingerprint and (with a tag model) tags from one read of the file.

Writes no files: send no outputs.

Params: TempoParams optional

The BPM search range for tempo and analyze. It also settles half- and double-time: a track is reported at the tempo inside the range. max_bpm must be at least 10 above min_bpm.

FieldTypeNotes
min_bpmoptionalnumber

default 70 · 40–300

max_bpmoptionalnumber

default 180 · 40–300

Result: AnalyzeResult

FieldTypeNotes
sample_rateinteger
channelsinteger
duration_secondsnumber
loudnessLoudnessFields
tempoTempoFields
keyKeyFields
fingerprintFingerprintFields
tagsoptionalTagsFields or null

null when the instance has no tag model.

tags

Genre, mood and vocal tags from a CLAP audio model.

Writes no files: send no outputs.

Params: TagsParams optional

FieldTypeNotes
embeddingoptionalboolean

Also return the audio embedding (512 values for the production model), for similarity search.

default false

Result: TagsResult

TagsFields plus sample_rate, channels and duration_seconds.

FieldTypeNotes
modelstring
windowsinteger

≥ 1

embeddingoptionalarray of number
sample_rateinteger
channelsinteger
duration_secondsnumber
{label group}optionalarray of TagScore

Webhook

POST your webhook.url

A job finished

Sent to the job's webhook.url when it succeeds, fails or is canceled. Any 2xx response counts as delivered. Otherwise AudioKit retries after 10 s, 1 min, 5 min, 30 min, 2 h and 6 h, then gives up; GET /v1/jobs/{provider_job_id} always has the final state. event_id is unique per event: drop ones you've seen.

Verify X-Signature before trusting the body: it is t=<unix seconds>,v1=<hex>, where <hex> is HMAC-SHA256 of "{t}.{raw_body}" with your webhook secret. Reject timestamps more than 300 seconds old. Check your implementation against x-signature-test-vector.

Header

X-Signature

pattern ^t=[0-9]+,v1=[0-9a-f]{64}$

Signature test vector

webhook signature test vector
secret  whsec_test
body    {"event_id":"evt-1"}
header  t=1793440800,v1=27d3e5b970e7b39136241354c673e7849a3bceccff29da0b09c76a1d9b73b822

Body: WebhookEvent

FieldTypeNotes
event_idstring (uuid)

Unique per event.

typejob.succeeded | job.failed | job.canceled
created_atstring (date-time)
dataJob

Errors

Request errors

Returned with a 4xx or 5xx status when a request is refused.

CodeStatusMeaning
invalid_request422The body, a URL or params is invalid.
operation_unavailable422This instance can't run the operation (no ffmpeg or no tag model).
unauthorized401Missing or unknown API key.
not_found404No such job for this client.
idempotency_conflict409This job_id was already used with a different request.
unavailable503Storage is unavailable; retry.

Job errors

In error.code of a job whose status is failed.

CodeMeaning
input_url_rejectedThe URL isn't https or points at a non-public address
input_unreachableThe download failed or returned a non-2xx status
input_too_largeLarger than the instance's input limit (2 GiB by default)
input_hash_mismatchThe downloaded bytes don't match input.sha256
unsupported_formatNot a readable audio file
unsupported_codecNot a readable audio file
corrupt_inputDecoding failed partway
invalid_paramsThe params don't fit this file, e.g. a preview starting past the end
operation_unavailableThis instance can't run the operation
encode_failedThe encoder couldn't write the file, or its output didn't decode
output_url_rejectedAn output URL isn't https or points at a non-public address
output_upload_failedThe upload failed or returned a non-2xx status
timeoutEncoding ran over 30 minutes
canceledThe job was canceled while encoding
internalAudioKit's fault; safe to resubmit with a new job_id

Schemas

Every schema in the contract, in its order.

Health

FieldTypeNotes
status"ok"
versionstring

AudioKit version.

Capabilities

FieldTypeNotes
operationsarray of Capability

Capability

FieldTypeNotes
operationOperation
  • probe: decode the whole file and report its container, codec, format and duration
  • loudness: EBU R128 integrated loudness, loudness range, true peak and sample peak
  • waveform: a peak envelope for drawing a waveform
  • transcode: convert to WAV, FLAC, MP3 or AAC; writes the audio output
  • preview: a short excerpt with fades; writes the audio output
  • tempo: BPM and beat grid
  • key: musical key, Camelot code and tuning
  • fingerprint: a Chromaprint fingerprint for AcoustID
  • analyze: loudness, tempo, key, fingerprint and (with a tag model) tags from one read of the file
  • tags: genre, mood and vocal tags from a CLAP audio model
outputsarray of OutputName

Output names the request must give upload targets for in outputs.

asyncboolean

The result arrives later

requires_consentboolean

Error

FieldTypeNotes
errorobject

ApiErrorCode

Why a request was refused. New codes may be added.

invalid_request operation_unavailable unauthorized not_found idempotency_conflict unavailable or another string: new values may be added

JobErrorCode

Why a job failed. New codes may be added.

input_url_rejected input_unreachable input_too_large input_hash_mismatch unsupported_format unsupported_codec corrupt_input invalid_params operation_unavailable encode_failed output_url_rejected output_upload_failed timeout canceled internal or another string: new values may be added

JobError

FieldTypeNotes
codeJobErrorCode

Why a job failed. New codes may be added.

  • input_url_rejected: the URL isn't https or points at a non-public address
  • input_unreachable: the download failed or returned a non-2xx status
  • input_too_large: larger than the instance's input limit (2 GiB by default)
  • input_hash_mismatch: the downloaded bytes don't match input.sha256
  • unsupported_format / unsupported_codec: not a readable audio file
  • corrupt_input: decoding failed partway
  • invalid_params: the params don't fit this file, e.g. a preview starting past the end
  • operation_unavailable: this instance can't run the operation
  • encode_failed: the encoder couldn't write the file, or its output didn't decode
  • output_url_rejected: an output URL isn't https or points at a non-public address
  • output_upload_failed: the upload failed or returned a non-2xx status
  • timeout: encoding ran over 30 minutes
  • canceled: the job was canceled while encoding
  • internal: AudioKit's fault; safe to resubmit with a new job_id
messagestring

Operation

  • probe: decode the whole file and report its container, codec, format and duration

probe loudness waveform transcode preview tempo key fingerprint analyze tags

OutputName

audio

Sha256

string · pattern ^[0-9a-fA-F]{64}$

HttpsUrl

An https URL that resolves to a public address.

string (uri)

JobRequest

FieldTypeNotes
job_idstring

Yours, and the idempotency key. 1–200 printable ASCII characters, no spaces.

pattern ^[!-~]{1,200}$

operationOperation
  • probe: decode the whole file and report its container, codec, format and duration
  • loudness: EBU R128 integrated loudness, loudness range, true peak and sample peak
  • waveform: a peak envelope for drawing a waveform
  • transcode: convert to WAV, FLAC, MP3 or AAC; writes the audio output
  • preview: a short excerpt with fades; writes the audio output
  • tempo: BPM and beat grid
  • key: musical key, Camelot code and tuning
  • fingerprint: a Chromaprint fingerprint for AcoustID
  • analyze: loudness, tempo, key, fingerprint and (with a tag model) tags from one read of the file
  • tags: genre, mood and vocal tags from a CLAP audio model
inputInputFile
paramsoptionalobject or null

Settings for the operation; see the matching *Params schema. Unknown keys are rejected.

outputsoptionalmap of OutputTarget

An upload target for each output the operation writes, and no others.

webhookoptionalWebhookTarget
authorizationoptionalAuthorizationRef

InputFile

FieldTypeNotes
urlHttpsUrl

Signed GET URL. AudioKit downloads it once and never stores it.

sha256Sha256

The file's sha256. The job fails with input_hash_mismatch if the download differs.

filenameoptionalstring

Original filename

OutputTarget

Where AudioKit uploads one output: a signed PUT URL, plus any headers its signature requires. AudioKit sets Content-Type and Content-Length itself, so don't send them (or Host or Transfer-Encoding).

FieldTypeNotes
urlHttpsUrl

An https URL that resolves to a public address.

headersoptionalmap of string

WebhookTarget

FieldTypeNotes
urlHttpsUrl

An https URL that resolves to a public address.

AuthorizationRef

Your authorization decision, stored with the job for provenance. AudioKit never needs the documents behind it.

FieldTypeNotes
decision_idstring
purposeoptionalstring

NoParams

probe, loudness, key and fingerprint take no params.

object

WaveformParams

FieldTypeNotes
pointsoptionalinteger

default 1000 · 10–10000

TempoParams

The BPM search range for tempo and analyze. It also settles half- and double-time: a track is reported at the tempo inside the range. max_bpm must be at least 10 above min_bpm.

FieldTypeNotes
min_bpmoptionalnumber

default 70 · 40–300

max_bpmoptionalnumber

default 180 · 40–300

TagsParams

FieldTypeNotes
embeddingoptionalboolean

Also return the audio embedding (512 values for the production model), for similarity search.

default false

Format

AAC is written as .m4a (MP4 container, audio/mp4).

wav flac mp3 aac

SampleRate

22050 24000 32000 44100 48000 96000

TranscodeParams

Cover art and other non-audio streams are dropped; tags are kept. bit_depth is for WAV and FLAC only; bitrate_kbps for MP3 and AAC only. MP3 goes up to 48000 Hz.

FieldTypeNotes
formatFormat

AAC is written as .m4a (MP4 container, audio/mp4).

sample_rateoptionalSampleRate

Default the input's.

channelsoptional1 | 2

Default the input's.

bit_depthoptional16 | 24

default 24

bitrate_kbpsoptionalinteger

Default 320 for MP3

64–320

PreviewParams

FieldTypeNotes
start_secondsoptionalnumber

Default a third of the way in, moved earlier so the excerpt fits.

≥ 0

duration_secondsoptionalnumber

default 30 · 5–120

fade_secondsoptionalnumber

Fade in and out. At most half of duration_seconds.

default 1 · 0–10

formatoptionalFormat

AAC is written as .m4a (MP4 container, audio/mp4).

default "mp3"

bitrate_kbpsoptionalinteger

MP3 and AAC only.

default 192 · 64–320

JobStatus

queued running succeeded failed canceled

Job

result and provenance are present when status is succeeded; error when it's failed.

FieldTypeNotes
provider_job_idstring (uuid)
job_idstring
operationOperation
  • probe: decode the whole file and report its container, codec, format and duration
  • loudness: EBU R128 integrated loudness, loudness range, true peak and sample peak
  • waveform: a peak envelope for drawing a waveform
  • transcode: convert to WAV, FLAC, MP3 or AAC; writes the audio output
  • preview: a short excerpt with fades; writes the audio output
  • tempo: BPM and beat grid
  • key: musical key, Camelot code and tuning
  • fingerprint: a Chromaprint fingerprint for AcoustID
  • analyze: loudness, tempo, key, fingerprint and (with a tag model) tags from one read of the file
  • tags: genre, mood and vocal tags from a CLAP audio model
statusJobStatus
resultoptionalobject
erroroptionalJobError
provenanceoptionalProvenance
created_atstring (date-time)
started_atoptionalstring (date-time)
finished_atoptionalstring (date-time)

Provenance

FieldTypeNotes
input_sha256Sha256

pattern ^[0-9a-fA-F]{64}$

audiokit_versionstring
operationOperation
  • probe: decode the whole file and report its container, codec, format and duration
  • loudness: EBU R128 integrated loudness, loudness range, true peak and sample peak
  • waveform: a peak envelope for drawing a waveform
  • transcode: convert to WAV, FLAC, MP3 or AAC; writes the audio output
  • preview: a short excerpt with fades; writes the audio output
  • tempo: BPM and beat grid
  • key: musical key, Camelot code and tuning
  • fingerprint: a Chromaprint fingerprint for AcoustID
  • analyze: loudness, tempo, key, fingerprint and (with a tag model) tags from one read of the file
  • tags: genre, mood and vocal tags from a CLAP audio model
paramsobject

The params as submitted.

WebhookEvent

FieldTypeNotes
event_idstring (uuid)

Unique per event.

typejob.succeeded | job.failed | job.canceled
created_atstring (date-time)
dataJob

Decibels

Rounded to 0.01. null for silence.

number or null

ProbeResult

FieldTypeNotes
containerstring

e.g. wave, flac, mp3

codecstring
sample_rateinteger
channelsinteger
bits_per_sampleinteger or null
framesinteger
duration_secondsnumber
size_bytesinteger
decode_errorsinteger
validboolean

True when the whole file decoded without errors.

StreamFields

The input's format, reported with every analysis result.

FieldTypeNotes
sample_rateinteger
channelsinteger
duration_secondsnumber

LoudnessFields

FieldTypeNotes
integrated_lufsDecibels

Rounded to 0.01. null for silence.

loudness_range_luDecibels

Rounded to 0.01. null for silence.

true_peak_dbtpDecibels

Rounded to 0.01. null for silence.

sample_peak_dbfsDecibels

Rounded to 0.01. null for silence.

LoudnessResult

FieldTypeNotes
integrated_lufsDecibels

Rounded to 0.01. null for silence.

loudness_range_luDecibels

Rounded to 0.01. null for silence.

true_peak_dbtpDecibels

Rounded to 0.01. null for silence.

sample_peak_dbfsDecibels

Rounded to 0.01. null for silence.

sample_rateinteger
channelsinteger
duration_secondsnumber

TempoFields

bpm and confidence are null when no beat was found (e.g. silence or ambient audio).

FieldTypeNotes
bpmnumber or null

Rounded to 0.01.

confidencenumber or null

0–1

steadyboolean

True when the tempo holds for the whole track.

beat_countinteger

≥ 0

beatsarray of number

Beat times in seconds from the start, rounded to 0.001.

TempoResult

FieldTypeNotes
bpmnumber or null

Rounded to 0.01.

confidencenumber or null

0–1

steadyboolean

True when the tempo holds for the whole track.

beat_countinteger

≥ 0

beatsarray of number

Beat times in seconds from the start, rounded to 0.001.

sample_rateinteger
channelsinteger
duration_secondsnumber

KeyName

string · pattern ^(C|C#|D|Eb|E|F|F#|G|Ab|A|Bb|B) (major|minor)$ · e.g. A minor, Eb major

Camelot

Camelot wheel code; A is minor, B is major.

string · pattern ^(1[0-2]|[1-9])[AB]$

KeyFields

All fields except candidates are null when no key could be estimated.

FieldTypeNotes
keyKeyName or null
tonicC | C# | D | Eb | E | F | F# | G | Ab | A | Bb | B or null
modemajor | minor or null
camelotCamelot or null
confidencenumber or null
tuning_centsnumber or null

How far the track sits from A440

candidatesarray of object

The top keys, best first.

at most 3 items

chromaarray of number or null

KeyResult

FieldTypeNotes
keyKeyName or null
tonicC | C# | D | Eb | E | F | F# | G | Ab | A | Bb | B or null
modemajor | minor or null
camelotCamelot or null
confidencenumber or null
tuning_centsnumber or null

How far the track sits from A440

candidatesarray of object

The top keys, best first.

at most 3 items

chromaarray of number or null
sample_rateinteger
channelsinteger
duration_secondsnumber

FingerprintFields

FieldTypeNotes
fingerprintstring or null

AcoustID-compatible Chromaprint of the first 120 seconds, compressed and base64url encoded (no padding), like fpcalc prints. null if the audio is too short.

algorithm"chromaprint-2"
fingerprint_secondsnumber

Seconds of audio fingerprinted.

≥ 0

FingerprintResult

FieldTypeNotes
fingerprintstring or null

AcoustID-compatible Chromaprint of the first 120 seconds, compressed and base64url encoded (no padding), like fpcalc prints. null if the audio is too short.

algorithm"chromaprint-2"
fingerprint_secondsnumber

Seconds of audio fingerprinted.

≥ 0

sample_rateinteger
channelsinteger
duration_secondsnumber

AnalyzeResult

FieldTypeNotes
sample_rateinteger
channelsinteger
duration_secondsnumber
loudnessLoudnessFields
tempoTempoFields
keyKeyFields
fingerprintFingerprintFields
tagsoptionalTagsFields or null

null when the instance has no tag model.

TagScore

FieldTypeNotes
tagstring

e.g. techno, melancholic, instrumental

scorenumber

Probability within its group.

0–1

TagsFields

One array per label group (genre, mood, vocals with the production labels), each holding that group's top tags, best first. Group names come from the instance's label file.

FieldTypeNotes
modelstring

The tag model's name.

windowsinteger

Ten-second windows the embedding averages.

≥ 1

embeddingoptionalarray of number

Present when params.embedding is true. Unit length.

{key}optionalarray of TagScore

TagsResult

TagsFields plus sample_rate, channels and duration_seconds.

FieldTypeNotes
modelstring
windowsinteger

≥ 1

embeddingoptionalarray of number
sample_rateinteger
channelsinteger
duration_secondsnumber
{key}optionalarray of TagScore

WaveformResult

FieldTypeNotes
pointsinteger
peaksarray of number

Largest absolute sample in each slice, 0–1.

sample_rateinteger
channelsinteger
duration_secondsnumber

AudioOutputFields

What was uploaded. Re-hash what you stored and compare with sha256 and size_bytes.

FieldTypeNotes
formatFormat

AAC is written as .m4a (MP4 container, audio/mp4).

content_typeaudio/wav | audio/flac | audio/mpeg | audio/mp4
sample_rateinteger
channelsinteger
duration_secondsnumber
bit_depthoptionalinteger

WAV and FLAC.

bitrate_kbpsoptionalinteger

MP3 and AAC.

sha256Sha256

pattern ^[0-9a-fA-F]{64}$

size_bytesinteger

AudioOutput

FieldTypeNotes
formatFormat

AAC is written as .m4a (MP4 container, audio/mp4).

content_typeaudio/wav | audio/flac | audio/mpeg | audio/mp4
sample_rateinteger
channelsinteger
duration_secondsnumber
bit_depthoptionalinteger

WAV and FLAC.

bitrate_kbpsoptionalinteger

MP3 and AAC.

sha256Sha256

pattern ^[0-9a-fA-F]{64}$

size_bytesinteger

PreviewAudioOutput

FieldTypeNotes
formatFormat

AAC is written as .m4a (MP4 container, audio/mp4).

content_typeaudio/wav | audio/flac | audio/mpeg | audio/mp4
sample_rateinteger
channelsinteger
duration_secondsnumber
bit_depthoptionalinteger

WAV and FLAC.

bitrate_kbpsoptionalinteger

MP3 and AAC.

sha256Sha256

pattern ^[0-9a-fA-F]{64}$

size_bytesinteger
start_secondsnumber
fade_secondsnumber

TranscodeResult

FieldTypeNotes
outputsobject

PreviewResult

FieldTypeNotes
outputsobject