BesselScribe
API / ENGLISH

A transcript in a few lines.

Base URL: https://scribe.besselaudio.com
Model: Sonaflow/bessel-consensus3-r1

1. Create a key and submit audio

Create an account, verify your email, and generate a key in the console. Save it when it is displayed; the full key cannot be viewed again. Authenticate using Authorization: Bearer <key>.

export BESSEL_API_URL="https://scribe.besselaudio.com"
export BESSEL_API_KEY="<your-api-key>"
REQUEST_ID=$(python -c 'import uuid; print(uuid.uuid4().hex)')

curl "$BESSEL_API_URL/v1/jobs" \
  -H "Authorization: Bearer $BESSEL_API_KEY" \
  -H "Idempotency-Key: $REQUEST_ID" \
  -F "model=Sonaflow/bessel-consensus3-r1" \
  -F "language=en" \
  -F "file=@audio.wav"

The response returns HTTP 202 with an id and status. Keep the job ID and your original idempotency key.

{"id":"job_...","status":"processing","model":"Sonaflow/bessel-consensus3-r1","poll_after_seconds":3}

2. Poll the same job

curl "$BESSEL_API_URL/v1/jobs/job_..." \
  -H "Authorization: Bearer $BESSEL_API_KEY"

Poll no more often than every three seconds. A completed job includes result.text and the final charge_usd. Text is normalized English; original punctuation and capitalization are not preserved. Empty text is possible and is returned unchanged.

States are processing, queued, running, complete and failed. A timeout does not cancel a job. If the upload response was lost, retry with the same idempotency key and identical audio to recover the same job. Do not create a fresh key to replay an accepted task. A request already accepted continues if its API key is revoked.

API reference

MethodPathPurpose
GET/v1/modelsAvailable model
GET/v1/evaluation-contractVersion and data-handling metadata
POST/v1/jobsCreate an asynchronous transcription
GET/v1/jobs/{id}Read your job and result
POST/v1/audio/transcriptionsWait up to 50 seconds; returns HTTP 202 with a job ID if still processing
GET/v1/usageYour balance and usage

Uploads accept only file, model and language=en. Idempotency keys must contain 16–128 letters, digits, underscores, periods or hyphens. Reference text, dataset names, vocabulary lists and prompts are unsupported.

Limits and errors

WAV or FLAC, mono or stereo, 8–48 kHz, up to 300 seconds and 24 MiB. One active transcription per account and at most 30 new jobs per minute. Shared capacity limits also apply.

StatusMeaning
401Missing, invalid or revoked API key
402Insufficient prepaid balance
403Account requires attention
404Job not found in your account
409Idempotency key reused with different input
413 / 422Oversized upload or unsupported input
429Concurrency, request rate or free trial capacity reached
503Temporarily unavailable; preserve the original request ID

The service stays running between requests, but queueing, processing, deployments and instance recovery can add latency. Beta availability is not an uptime guarantee.

Data handling and versioning

Uploaded audio is processed transiently in memory. Transcripts, request metadata and billing records are retained for recovery and service operation; no fixed retention period is currently specified. See Privacy. Keys are private to your account and must not be placed in browser applications or public repositories.

The public release uses a fixed model configuration. See the model card for evaluation evidence and its limitations. Leaderboard inclusion and independent verification are not claimed.