Hosted Orukeet preview · Updated November 11, 2026
Transcription with speaker diarization
Send a short English recording with diarize=True to receive a transcript and speaker-tagged turns. The sample below returned two speaker labels and five turns; these are model predictions, not verified speaker identities.
| Runtime | Python 3.10+; Oruk SDK 0.2.15 (versioned wheel) |
|---|---|
| Access | An active Oruk subscription or eligible legacy account, API access, a key and available allowance/budget |
| Price | $0.00445/audio minute ($0.267/hour): base transcription + diarization |
| Input | English; WAV, FLAC, MP3, M4A, OGG or WebM; at most 60 seconds; 4 MiB complete multipart request |
| Output | text, speakers, timed segments and usage; no persistent identity or separated audio tracks |
| Demo limits | File is capped at 4 MiB minus 64 KiB for multipart overhead; no automatic retries; requested diarization must succeed |
Plans start at $9/month. Usage draws from the separate Orukeet allowance; excess usage shares your spending cap. Trial allowances are smaller and overage is disabled. See total monthly costs and assumptions.
Run the example
Create a key in your account and set ORUK_API_KEY in your local environment. Keep it out of source control. On Windows, activate the Python environment with .venv\Scripts\activate.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install https://oruk.ai/sdk/oruk-0.2.15-py3-none-any.whl
curl --fail -O https://oruk.ai/examples/orukeet-api.py
curl --fail -o sample.wav https://oruk.ai/samples/conversations/02-grocery-prices.wav
# Set ORUK_API_KEY in your environment, then run:
python orukeet-api.py sample.wav --diarize > result.jsonComplete Python source
"""Transcribe short English audio with the Orukeet hosted preview.
Python 3.10+. Install the versioned SDK documented in the canonical guide:
https://oruk.ai/guides/orukeet-python-transcription
Set ORUK_API_KEY, then run: python orukeet-api.py sample.wav [--diarize]
Prints complete JSON to stdout. No automatic retry after an uncertain request.
"""
import argparse
import json
import os
from pathlib import Path
import sys
import uuid
from oruk import Oruk, OrukAPIError
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("audio", type=Path)
parser.add_argument("--diarize", action="store_true")
args = parser.parse_args()
key = os.environ.get("ORUK_API_KEY")
if not key:
parser.error("Set ORUK_API_KEY in your environment; never put it in source.")
if not args.audio.is_file():
parser.error("Audio file does not exist.")
# Reserve 64 KiB for multipart fields and headers below the API 4 MiB cap.
if not 0 < args.audio.stat().st_size <= 4 * 1024 * 1024 - 64 * 1024:
parser.error("Use a nonempty file at most 4 MiB minus 64 KiB; the whole multipart request must fit 4 MiB.")
request_id = str(uuid.uuid4())
print(f"Request ID: {request_id}", file=sys.stderr)
try:
with Oruk(api_key=key, max_retries=0, timeout=120) as client:
result = client.transcribe(
args.audio, model="oruk-orukeet", diarize=args.diarize,
request_id=request_id,
)
print(json.dumps(result, ensure_ascii=False, indent=2))
return 0
except OrukAPIError as error:
print(json.dumps({"status": error.status, "code": error.code,
"request_id": error.request_id or request_id}), file=sys.stderr)
print("Check the guide's error table before trying again. No retry was made.", file=sys.stderr)
return 1
except Exception as error:
print(f"{type(error).__name__}; request {request_id}. Outcome may be unknown; no retry was made.", file=sys.stderr)
return 1
if __name__ == "__main__":
raise SystemExit(main())
Source and installation instructions are also available in the public GitHub examples.
Hear the sample and inspect the result
An actual API response captured November 11, 2026 for this 14.45-second recording follows. The saved payload was captured with a multipart HTTP client using the same model, fields and sample as this recipe. IDs, timing, transcripts and scores may vary between requests.
{
"id": "tr_d17458369c9f4863b240b67dd91ca187",
"object": "audio.transcription",
"model": "oruk-orukeet",
"task": "transcription",
"text": "I'm sorry. The price of food has gone up so much. I mean It really has. What happened? I don't know. Like, honestly, I don't know what happened.",
"language": "en",
"duration": 14.45,
"audio_seconds": 14.45,
"emotions": [],
"styles": [],
"segments": [
{
"start": 0.185,
"end": 4.305,
"speaker": "speaker_0",
"text": "I'm sorry. The price of food has gone up so much. I mean",
"emotions": [],
"styles": [],
"id": 0
},
{
"start": 4.305,
"end": 6.005,
"speaker": "speaker_1",
"text": "It really has.",
"emotions": [],
"styles": [],
"id": 1
},
{
"start": 6.005,
"end": 7.805,
"speaker": "speaker_0",
"text": "What happened?",
"emotions": [],
"styles": [],
"id": 2
},
{
"start": 8.805,
"end": 10.585,
"speaker": "speaker_1",
"text": "I don't know.",
"emotions": [],
"styles": [],
"id": 3
},
{
"start": 11.245,
"end": 14.125,
"speaker": "speaker_1",
"text": "Like, honestly, I don't know what happened.",
"emotions": [],
"styles": [],
"id": 4
}
],
"diarized": true,
"speakers": [
"speaker_0",
"speaker_1"
],
"usage": {
"audio_seconds": 14.45,
"billable_seconds": 14.45,
"billing_unit": "audio_second",
"billing_basis": "prepaid",
"rate_per_minute_usd": "0.00445",
"estimated_cost_usd": "0.001072",
"cost_microusd": 1072,
"pricing_version": "2026-09-13-orukeet",
"tasks": [
"transcription",
"diarize"
]
},
"request_id": "req_a90fcc06ef9848308e6624e44844b244",
"asr_ms": 37.05629000069166,
"server_ms": 10907.113646000653
}Download JSON · Capture and SHA-256 record · Sample attribution. Audio: The Agentic Data Company, Open Yap 1K (2026), CC BY 4.0; excerpted and downmixed by Oruk. Recorded usage came from a legacy prepaid demonstration account and is not a current subscription invoice.
Handle failures and check the limits
| 400 / 413 / 415 / 422 | Check the model, fields, file format, complete request size and audio duration. Do not silently truncate a recording. |
|---|---|
| 401 / 403 | Check the key and account/API access. A verified email alone does not grant inference access. |
| 402 | Check the subscription, allowance and spending cap. Do not keep resending audio. |
| 429 / 503 | Respect Retry-After when supplied and inspect the error. The sample does not retry automatically. |
| Timeout / disconnect | The outcome may be unknown. Retain the request ID for investigation; this guide does not promise idempotent replay for Orukeet. |
Speaker labels apply only within this recording. Overlap, short turns and similar voices can cause missed or incorrect boundaries; do not infer personal identity or roles. Optional diarization sends audio to pyannoteAI with its disclosed temporary retention. The September serving measurements have their original client, hardware and timing boundaries in the benchmark comparison. The hosted English preview is separate from the 25-language downloadable model. Read the audio-processing terms before sending private recordings.