Shunya Labs DocsShunya Labs Docs
🌐 International
🇺🇸 English
🇯🇵 Japanese
🇨🇳 Chinese (Simplified)
🇹🇼 Chinese (Traditional)
🇸🇦 Arabic
🇩🇪 German
🇫🇷 French
🇪🇸 Spanish
🇧🇷 Portuguese
🇷🇺 Russian
🇰🇷 Korean
🇹🇷 Turkish
🇻🇳 Vietnamese
🇮🇩 Indonesian
🇮🇳 Hindi Belt
हिन्दी — Hindi
भोजपुरी — Bhojpuri
मैथिली — Maithili
राजस्थानी — Rajasthani
🇮🇳 South India
தமிழ் — Tamil
తెలుగు — Telugu
ಕನ್ನಡ — Kannada
മലയാളം — Malayalam
🇮🇳 West India
मराठी — Marathi
ગુજરાતી — Gujarati
कोंकणी — Konkani
🇮🇳 East India
বাংলা — Bengali
ଓଡ଼ିଆ — Odia
অসমীয়া — Assamese
🇮🇳 North-East India
মেইতেই — Meitei
नेपाली — Nepali
🇮🇳 North India
ਪੰਜਾਬੀ — Punjabi
اردو — Urdu
کٲشُر — Kashmiri
डोगरी — Dogri
سنڌي — Sindhi

Intelligence Layer

Optional capabilities on top of Zero STT. Turn each one on with a boolean flag on the same transcription request, results come back in the same JSON as your transcript. Mix and match freely.

Works with batch ASR today
Add flags to POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions. Every example below uses that endpoint unless noted.

How to enable

Pick a feature below, copy the flag into your request, and open Show request & response on the card for a ready-to-run example.

  1. Send your audio file (or URL) with model=zero-indic (or another Zero STT model).
  2. Add one or more enable_* fields, all are optional.
  3. Read enriched fields on the response: segments, speakers, nlp_analysis, and more.

Jump to a feature

All features

01

Diarization

enable_diarization=true

Who spoke when. Adds speaker: SPEAKER_XX on each segment and a top-level speakers array.

Show request & response

Request

curl -X POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@meeting.wav" \
  -F "model=zero-indic" \
  -F "enable_diarization=true"

Response (excerpt)

{
  "text": "[SPEAKER_00] नमस्ते... [SPEAKER_01] मैं ठीक हूँ...",
  "segments": [
    { "start": 0.5, "end": 3.2, "text": "...", "speaker": "SPEAKER_00" },
    { "start": 4.1, "end": 6.8, "text": "...", "speaker": "SPEAKER_01" }
  ],
  "speakers": ["SPEAKER_00", "SPEAKER_01"]
}
02

Speaker identification

enable_speaker_identification=true

Replace anonymous labels with registered names. Requires diarization and a voice profile per speaker.

Show request & response

First register a speaker with a 5-15 s clean clip, then transcribe with project set to your voice library.

Request

curl -X POST https://asrv2prod.shunyalabs.ai/v1/speakers/register \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "name=Priya" -F "file=@priya_sample.wav" -F "project=support_team"

curl -X POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@call.wav" -F "model=zero-indic" \
  -F "enable_diarization=true" \
  -F "enable_speaker_identification=true" \
  -F "project=support_team"
03

Emotion diarization

enable_emotion_diarization=true

Dominant emotion per segment, e.g. angry, neutral. Works with or without speaker diarization.

Show request & response

Request

curl -X POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@call.wav" -F "model=zero-indic" \
  -F "enable_diarization=true" \
  -F "enable_emotion_diarization=true"

Response (excerpt)

{
  "segments": [
    { "speaker": "SPEAKER_00", "emotion": "angry", "text": "..." },
    { "speaker": "SPEAKER_01", "emotion": "neutral", "text": "..." }
  ]
}
04

Intent detection

enable_intent_detection=true

Classify the call into your taxonomy. Optional intent_choices JSON array constrains labels.

Show request & response

Request

curl -X POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@call.wav" -F "model=zero-indic" \
  -F "enable_intent_detection=true" \
  -F 'intent_choices=["complaint","inquiry","service_request"]'

Response (excerpt)

{
  "nlp_analysis": {
    "intent": {
      "label": "service_request",
      "confidence": 0.92,
      "reasoning": "Caller is requesting roadside assistance..."
    }
  }
}
05

Sentiment analysis

enable_sentiment_analysis=true

Overall sentiment of the transcript: label, score (−1 to 1), and a short explanation.

Show request & response

Request

curl -X POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@call.wav" -F "model=zero-indic" \
  -F "enable_sentiment_analysis=true"

Response (excerpt)

{
  "nlp_analysis": {
    "sentiment": {
      "label": "negative",
      "score": -0.72,
      "explanation": "Customer expresses frustration..."
    }
  }
}
06

Summarization

enable_summarization=true

Short summary of the full transcript. Use summary_max_length for an approximate word cap (default 150).

Show request & response

Request

curl -X POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@call.wav" -F "model=zero-indic" \
  -F "enable_summarization=true" \
  -F "summary_max_length=50"

Response (excerpt)

{
  "nlp_analysis": {
    "summary": "Customer called about a vehicle breakdown. Agent confirmed the complaint was registered..."
  }
}
07

Keyterm normalization

enable_keyterm_normalization=true

Fix domain terms the ASR may spell informally, e.g. emiEMI. Optional keyterm_keywords glossary.

Show request & response

Request

curl -X POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@call.wav" -F "model=zero-indic" \
  -F "enable_keyterm_normalization=true" \
  -F 'keyterm_keywords=["EMI","NACH mandate","bounce charge"]'

Your key terms bias recognition toward their correct spellings; the corrected terms appear in the transcript itself.

08

Translation

POST /v1/translate

A separate endpoint, not a transcription flag. Transcribe first, then POST the transcript text with a target_language (ISO code en or name English).

Show request & response

Request

curl -X POST https://asrv2prod.shunyalabs.ai/v1/translate \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text": "नमस्ते, यह एक ज़रूरी कॉल है।", "target_language": "en"}'

Response (excerpt)

{
  "translation": "Hello, this is an urgent call."
}
09

Profanity hashing

enable_profanity_hashing=true

Mask profane words with **** in the transcript and every segment.

Show request & response

Request

curl -X POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@call.wav" -F "model=zero-indic" \
  -F "enable_profanity_hashing=true"
10

Custom keyword redaction

hash_keywords=[...]

Regex masking for PII and sensitive phrases, fast, no LLM. Pass a JSON array to hash_keywords.

Show request & response

Request

curl -X POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@call.wav" -F "model=zero-indic" \
  -F 'hash_keywords=["account number","card number","OTP","aadhaar"]'

Response (excerpt)

{
  "text": "आपका **** 4321 है और आपका **** कल भेजा गया था"
}
11

Word timestamps

response_format=verbose_json

Per-word start, end and confidence, returned in `words[]`. There is no separate flag — `response_format=verbose_json` is what turns them on.

Show request & response

Request

curl -X POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@call.wav" -F "model=zero-indic" \
  -F "response_format=verbose_json"

Response (excerpt)

{
  "segments": [{
    "text": "नमस्ते मोहम्मद जी",
    "words": [
      { "word": "नमस्ते", "start": 0.532, "end": 0.932, "score": 0.85 }
    ]
  }]
}

Combine features

Enable everything you need on one request. Typical contact-centre stack:

curl -X POST https://asrv2prod.shunyalabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -F "file=@call.wav" -F "model=zero-indic" -F "language_code=hi" \
  -F "enable_diarization=true" \
  -F "enable_speaker_identification=true" -F "project=support_team" \
  -F "enable_emotion_diarization=true" -F "response_format=verbose_json" \
  -F "enable_intent_detection=true" \
  -F 'intent_choices=["complaint","inquiry","service_request"]' \
  -F "enable_summarization=true" -F "enable_sentiment_analysis=true" \
  -F 'hash_keywords=["account number","card number","OTP"]'
Latency trade-off
NLP features (intent, sentiment, summary, keyterms, translation, profanity) add an extra processing pass on top of ASR. Enable only what you will use in production.
Intelligence | Shunya Labs Docs