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.
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.
curl -X POST https://api.hashteelab.com/v1/audio/transcriptions \ -H "Authorization: Bearer raru_sk_..." \ -F "file=@recording.wav" \ -F "language=hi"
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.wavSpeech-to-Text
Powered by Kundoo — transcribe audio in Hindi, Tamil, Telugu, Bengali, and 10+ Indian languages.
Request
Content-Type: multipart/form-data
| Parameter | Type | Description |
|---|---|---|
| file* | file | Audio file (WAV, MP3, FLAC, OGG). Max 25MB, 10 min. |
| language | string | Language 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.
Request
Content-Type: application/json
| Parameter | Type | Description |
|---|---|---|
| text* | string | Text to synthesize. Max 1000 characters. |
| voice | string | Voice ID: rahul, rahul-hi, sanji, sanji-hi. Default: rahul. |
| language | string | Language: 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
Returns your account info and credit balance.
{
"user_id": "0b7ca760-b1e5-41f2-bd00-87342b01bd1e",
"email": "user@example.com",
"credits": 84
}Usage
| Parameter | Type | Description |
|---|---|---|
| from | string | Start date (ISO format, e.g. 2026-04-01) |
| to | string | End 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
}
}
}| Parameter | Type | Description |
|---|---|---|
| limit | integer | Max entries (1–200). Default: 50 |
| offset | integer | Pagination offset. Default: 0 |
Billing
{
"credits": 84
}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
| Code | Meaning |
|---|---|
| 400 | Bad request — invalid input, empty text |
| 401 | Invalid or missing API key |
| 402 | Insufficient credits |
| 413 | File too large (>25MB) |
| 429 | Rate limit exceeded |
| 500 | Internal server error |
| 503 | Inference service unavailable |
{ "detail": "Insufficient credits: need 5, have 2" }Rate Limits
| Endpoint | Limit |
|---|---|
| /v1/audio/transcriptions | 10 requests/minute per API key |
| /v1/audio/speech | 30 requests/minute per API key |
Rate-limited responses return 429 with a Retry-After header.
Pricing
| Model | Unit | Credits |
|---|---|---|
| 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.
