API Reference

The Hashtee Platform API provides Speech-to-Text (Kundoo) and Text-to-Speech (Shama) capabilities for Indian languages. All endpoints are accessed via https://api.hashteelab.com

Authentication

All API requests require an API key passed in the Authorization header. Create API keys in your dashboard.

Header
Authorization: Bearer raru_sk_your_api_key_here

Keep your API key secret. Do not share it or expose it in client-side code.

Quickstart

Make your first API call in seconds.

Transcribe audio (Speech-to-Text)
curl -X POST https://api.hashteelab.com/v1/audio/transcriptions \
  -H "Authorization: Bearer raru_sk_..." \
  -F "file=@recording.wav" \
  -F "language=hi"
Generate speech (Text-to-Speech)
curl -X POST https://api.hashteelab.com/v1/audio/speech \
  -H "Authorization: Bearer raru_sk_..." \
  -H "Content-Type: application/json" \
  -d '{"text": "नमस्ते दुनिया", "voice": "rahul", "language": "hi-IN"}' \
  -o output.wav

Speech-to-Text

Powered by Kundoo — transcribe audio in Hindi, Tamil, Telugu, Bengali, and 10+ Indian languages.

POST/v1/audio/transcriptions

Request

Content-Type: multipart/form-data

ParameterTypeDescription
file*fileAudio file (WAV, MP3, FLAC, OGG). Max 25MB, 10 min.
languagestringLanguage code: hi, ta, te, bn, en, etc. Default: auto-detect.

Response

{
  "text": "नमस्ते, यह एक परीक्षण ट्रांसक्रिप्शन है।",
  "language": "hi",
  "duration": 12.5,
  "credits_charged": 5,
  "credits_remaining": 95
}

Pricing: 5 credits per minute of audio (rounded up, minimum 5).

Text-to-Speech

Powered by Shama — generate natural speech with expressive Indian voices.

POST/v1/audio/speech

Request

Content-Type: application/json

ParameterTypeDescription
text*stringText to synthesize. Max 1000 characters.
voicestringVoice ID: rahul, rahul-hi, sanji, sanji-hi. Default: rahul.
languagestringLanguage: hi-IN, ta-IN, te-IN, bn-IN, en-IN. Default: hi-IN.

Response

Returns audio/wav binary. Credits info in response headers:

X-Credits-Charged: 2
X-Credits-Remaining: 93

Pricing: 2 credits per request.

Account

GET/v1/me

Returns your account info and credit balance.

{
  "user_id": "0b7ca760-b1e5-41f2-bd00-87342b01bd1e",
  "email": "user@example.com",
  "credits": 84
}

Usage

GET/v1/usage
ParameterTypeDescription
fromstringStart date (ISO format, e.g. 2026-04-01)
tostringEnd date (ISO format)
{
  "user_id": "0b7ca760-...",
  "period": {
    "from": "2026-04-01",
    "to": "2026-04-30"
  },
  "usage": {
    "stt": {
      "requests": 2,
      "total_credits": 10,
      "total_input_size": 78,
      "avg_duration_ms": 0
    },
    "tts": {
      "requests": 3,
      "total_credits": 6,
      "total_input_size": 59,
      "avg_duration_ms": 120.3
    }
  }
}
GET/v1/usage/history
ParameterTypeDescription
limitintegerMax entries (1–200). Default: 50
offsetintegerPagination offset. Default: 0

Billing

GET/v1/billing/balance
{
  "credits": 84
}
GET/v1/billing/packs

Available credit packs:

{
  "packs": [
    {
      "amount_paise": 9900,
      "amount_inr": 99,
      "credits": 1000
    },
    {
      "amount_paise": 44900,
      "amount_inr": 449,
      "credits": 5000
    },
    {
      "amount_paise": 159900,
      "amount_inr": 1599,
      "credits": 20000
    }
  ]
}

Error Codes

CodeMeaning
400Bad request — invalid input, empty text
401Invalid or missing API key
402Insufficient credits
413File too large (>25MB)
429Rate limit exceeded
500Internal server error
503Inference service unavailable
Error response format
{ "detail": "Insufficient credits: need 5, have 2" }

Rate Limits

EndpointLimit
/v1/audio/transcriptions10 requests/minute per API key
/v1/audio/speech30 requests/minute per API key

Rate-limited responses return 429 with a Retry-After header.

Pricing

ModelUnitCredits
Kundoo (STT)Per minute of audio (rounded up)5
Shama (TTS)Per request (≤1000 chars)2

New accounts receive 100 free credits. Purchase more in the billing dashboard.