API documentation

Programmatic access to Axilero’s transcription services.

Getting started

API access requires a Pro subscription. Create an API key from your account page, choose which scopes it should have, and copy it once — the full key is shown only at creation time.

Pro accounts can create up to 5 keys and get unlimited transcriptions. The API isn’t available on the free tier.

Base URL: https://axilero.com

Authentication

Send your API key in the Authorization header:

Authorization: Bearer axl_YOUR_KEY
bash

For the WebSocket endpoint, pass the key as the token query parameter instead.

Quickstart

End-to-end: upload a file, poll until done, print the transcript.

# 1. Submit
JOB=$(curl -s -X POST https://axilero.com/jobs/upload \
  -H "Authorization: Bearer $AXILERO_KEY" \
  -F "file=@meeting.mp3" \
  -F "language=auto" \
  -F "summary_mode=bullets" | jq -r .job_id)

# 2. Poll
while true; do
  STATUS=$(curl -s https://axilero.com/jobs/$JOB -H "Authorization: Bearer $AXILERO_KEY" | jq -r .status)
  echo "$STATUS"
  [ "$STATUS" = "done" ] && break
  [ "$STATUS" = "error" ] && exit 1
  sleep 5
done

# 3. Read result
curl -s https://axilero.com/jobs/$JOB -H "Authorization: Bearer $AXILERO_KEY" | jq -r .result.text
bash

Set AXILERO_KEY in your environment first. Replace meeting.mp3 with your audio or video file.

Scopes

Each key is bound to one or more scopes. Requests to endpoints outside the key’s scopes return 403.

transcribe:writeSubmit new transcription jobs (URL or file upload).
transcribe:readList your jobs and read transcription results.

Endpoints

POST/jobstranscribe:write

Submit a transcription job for a public URL. The URL must point directly to a media file you have the right to access (e.g. a self-hosted MP3/WAV/MP4 or a podcast-feed enclosure). Streaming platforms like YouTube, Spotify, TikTok, Instagram, Twitch, Netflix etc. are rejected because their Terms of Service forbid programmatic audio extraction — use /jobs/upload to post the file yourself instead.

curl -X POST https://axilero.com/jobs \
  -H "Authorization: Bearer axl_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/recording.mp3",
    "tier": "standard",
    "language": "da",
    "speaker_labels": false,
    "word_timestamps": false,
    "translate_to": null,
    "summary_mode": "bullets"
  }'
bash

tier: standardlanguage: ISO 639-1 source hint (e.g. da, en) — omit or use auto for auto-detectspeaker_labels: boolean — run pyannote speaker diarizationword_timestamps: boolean — per-word timing in segments[].wordstranslate_to: ISO 639-1 target (e.g. da, de, fr) — produces result.translationsummary_mode: brief | bullets | detailed

{ "job_id": "a1b2c3d4", "status": "queued" }
json
POST/jobs/uploadtranscribe:write

Upload an audio or video file directly (max 20 GB). The request body is streamed to disk — no in-memory buffering — so multi-hour recordings upload in one POST.

curl -X POST https://axilero.com/jobs/upload \
  -H "Authorization: Bearer axl_YOUR_KEY" \
  -F "file=@recording.mp3" \
  -F "tier=standard" \
  -F "language=da"
bash

Accepted formats: mp3, mp4, m4a, wav, ogg, webm, mkv, flac, aac, opus, wma, mov, avi.

GET/jobstranscribe:read

List your recent jobs (up to 200, newest first).

curl https://axilero.com/jobs \
  -H "Authorization: Bearer axl_YOUR_KEY"
bash
GET/jobs/{job_id}transcribe:read

Poll a specific job. Returns status; once done,result contains text and segments, plus any optional features you requested: speakers (diarization map), summary, translation. Error fields diarization_error / translation_error appear if those steps failed. SRT / VTT are generated client-side from segments.

curl https://axilero.com/jobs/a1b2c3d4 \
  -H "Authorization: Bearer axl_YOUR_KEY"
bash
{
  "job_id": "a1b2c3d4",
  "status": "done",
  "tier": "standard",
  "created_at": "2026-04-17T08:30:00+00:00",
  "error": null,
  "result": {
    "language": "en",
    "duration": 312.4,
    "text": "Full transcript...",
    "segments": [
      {
        "start": 0.0,
        "end": 3.2,
        "text": "Alright, so...",
        "speaker": "SPEAKER_00",
        "words": [ { "word": "Alright,", "start": 0.0, "end": 0.6 } ]
      }
    ],
    "speakers": { "SPEAKER_00": { "start": 0.0, "end": 3.2 } },
    "summary": { "mode": "bullets", "text": "- Key point 1..." },
    "translation": {
      "language": "da",
      "text": "Hele oversættelsen...",
      "segments": [ { "start": 0.0, "end": 3.2, "text": "Godt, så..." } ]
    },
    "diarization_error": null,
    "translation_error": null
  }
}
json

Rate limits

The API is Pro-only, so every key gets the Pro limits — a per-second burst limit, a per-minute window, and a daily cap:

TierPer secondPer minutePer day
Pro4601,000

The daily cap counts every API request, reads and writes alike. Jobs you submit through the web app use your account session, not an API key, so they don’t count against these limits.

When exceeded, requests return 429 Too Many Requests with a Retry-After header indicating how many seconds to wait before retrying.

Error codes

StatusMeaning
400Invalid parameters.
401Missing or invalid API key.
403Key lacks the required scope, or account is not Pro.
404Job not found (or not owned by this key’s user).
413Uploaded file exceeds 20 GB.
429Rate limit exceeded — see Retry-After.

Error responses return JSON: {"detail": "..."}.

Questions? support@axilero.com

We use only essential cookies to keep you signed in. We don't use advertising or cross-site tracking. See our Privacy policy for details.