Back to API documentation

Developer docs

STT API

Speech-to-Text endpoints. For server-to-server integrations, send X-Api-Key with each request.

API v1 API v2 STT https://back.aisha.group

Quick start

STT API

1

POST /api/v1/stt/post/ for short audio (sync).

2

POST /api/v2/stt/post/ for long audio (async, returns task_id).

Authentication

API Key

X-Api-Key: <api_key>

Recommended for server-to-server integrations.

POST

Short-audio transcription

Endpoint /api/v1/stt/post/

Upload a short audio file and get the result immediately (sync).

Authentication

Send X-Api-Key. Public requests may require reCAPTCHA.

Supported formats: mp3, wav, ogg, m4a (validated on the server).
With diarization enabled, audio must be at least 15 seconds.

Request fields

audio required
Example: voice-note.mp3
file

Audio file.

language optional
Example: uz
string

Supported: uz, en, ru. Default: uz.

has_diarization optional
Example: false
boolean string

Speaker diarization flag.

has_offset optional
Example: false
boolean string

Return segment offsets.

is_summary optional
Example: false
boolean string

Generate summary.

title optional
Example: meeting-voice-note
string

Optional title.

Examples

v1 POST

curl --request POST \
  --url https://back.aisha.group/api/v1/stt/post/ \
  --header 'X-Api-Key: your_api_key' \
  --header 'Accept-Language: uz' \
  --form 'audio=@/path/to/voice-note.mp3' \
  --form 'language=uz' \
  --form 'has_diarization=false'

Responses

200 OK

Success

{
  "id": 531,
  "gender": "unknown",
  "title": null,
  "created_at": "2026-05-04T10:12:43.212Z",
  "duration": 18.7,
  "transcript": "Assalomu alaykum, bu qisqa audio transkripsiyasi."
}

Status codes

200

Result returned.

400

Missing audio or invalid format.

402

Insufficient balance.

403

Duration limit or access issue.

503

STT service temporarily unavailable.

GET

v1 history list

Endpoint /api/v1/stt/get/?page=1&limit=10

Returns the user's transcripts with pagination.

Authentication

Requires X-Api-Key.

Frontend also uses the alias /api/v1/stt/audios/ in some places.

Examples

v1 GET history

curl --request GET \
  --url 'https://back.aisha.group/api/v1/stt/get/?page=1&limit=10' \
  --header 'X-Api-Key: your_api_key'

Responses

200 OK

Paginated success

{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": 531,
      "title": null,
      "gender": "unknown",
      "status": "SUCCESS",
      "language": "uz",
      "created_at": "2026-05-04T10:12:43.212Z",
      "duration": 18.7,
      "transcript": "Assalomu alaykum, bu qisqa audio transkripsiyasi.",
      "summary": "",
      "diarization": [],
      "audio_url": "/media/audio/f35f6c3a.wav",
      "speakers": []
    }
  ]
}

Status codes

200

History returned.

403

API key is invalid or missing.

POST

Long-audio transcription (async)

Endpoint /api/v2/stt/post/

Upload a long audio file. The response includes task_id and PENDING status.

Authentication

Requires X-Api-Key.

Max file size: 500MB.

Request fields

audio required
Example: meeting-record.mp3
file

Audio file.

language optional
Example: uz
string

Default: uz.

has_diarization optional
Example: true
boolean string

Speaker diarization flag.

has_offset optional
Example: false
boolean string

Offsets flag.

is_summary optional
Example: true
boolean string

Summary flag.

is_meeting optional
Example: false
boolean string

Meeting mode flag.

title optional
Example: sales-call
string

Optional title.

Examples

v2 POST

curl --request POST \
  --url https://back.aisha.group/api/v2/stt/post/ \
  --header 'X-Api-Key: your_api_key' \
  --form 'audio=@/path/to/meeting-record.mp3' \
  --form 'language=uz' \
  --form 'has_diarization=true' \
  --form 'is_summary=true'

Responses

200 OK

Queued

{
  "id": 901,
  "has_diarization": true,
  "is_meeting": false,
  "task_id": "66e92db4-95cf-4bb9-acbc-49462039d19f",
  "status": "PENDING",
  "title": "sales-call-13-aprel",
  "audio_url": "/media/audio/273bc5f8-1f91-4573-b3df-3c38c44294d0.mp3"
}

Status codes

200

Task created.

400

Missing audio or file too large.

401

API key is missing or invalid.

403

Balance or access error.

500

Internal error.

GET

v2 history list

Endpoint /api/v2/stt/get/

Returns the transcript history list (paginated).

Authentication

Requires X-Api-Key.

Detail: GET /api/v2/stt/get/{id}/.

Examples

v2 history

curl --request GET \
  --url 'https://back.aisha.group/api/v2/stt/get/?page=1&limit=10' \
  --header 'X-Api-Key: your_api_key'

Responses

200 OK

History

{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": 901,
      "title": "sales-call-13-aprel",
      "status": "PENDING",
      "created_at": "2026-05-04T10:39:58.501Z",
      "duration": null,
      "audio_url": "/media/audio/273bc5f8-1f91-4573-b3df-3c38c44294d0.mp3"
    }
  ]
}

Status codes

200

History/detail returned.

401

API key is missing or invalid.

404

Transcript not found.

GET

v2 transcript detail

Endpoint /api/v2/stt/get/{id}/

Returns status and result for a single transcript.

Authentication

Requires X-Api-Key.

When status=SUCCESS, the transcript result is included.

Examples

v2 detail

curl --request GET \
  --url https://back.aisha.group/api/v2/stt/get/901/ \
  --header 'X-Api-Key: your_api_key'

Responses

200 OK

Completed

{
  "id": 901,
  "title": "sales-call-13-aprel",
  "status": "SUCCESS",
  "created_at": "2026-05-04T10:39:58.501Z",
  "duration": 612.4,
  "transcript": "Uzoq meeting transcript matni...",
  "summary": "Qisqa summary...",
  "diarization": [],
  "audio_url": "/media/audio/273bc5f8-1f91-4573-b3df-3c38c44294d0.mp3"
}

Status codes

200

Detail returned.

401

API key is missing or invalid.

404

Transcript not found.

GET

Task status polling

Endpoint /task-status/{task_id}/?instance_id={id}

Checks async task state. instance_id is required for ownership verification.

Authentication

Requires Bearer token (JWT). Not available via API key.

This endpoint uses user auth (JWT), not X-Api-Key.

Examples

task-status

curl --request GET \
  --url 'https://back.aisha.group/task-status/task-123/?instance_id=944' \
  --header 'Authorization: Bearer your_access_token'

Responses

200 OK

Pending

{
  "task_id": "task-123",
  "status": "PENDING",
  "transcript_status": "PENDING",
  "message": "Task is still processing"
}
200 OK

Success

{
  "task_id": "task-123",
  "status": "SUCCESS",
  "transcript_status": "SUCCESS",
  "result": {
    "transcript": "Hello world"
  }
}

Status codes

200

Task status returned.

400

instance_id missing.

403

Access denied.

500

Task failed/unknown state.