Bodhan.AI APIs

The API for Indian languages.

Translation, speech to text, text to speech and document OCR. Use them from the client you already have, and pay per use in rupees.

Every new account starts with ₹10 of credit. No card needed.

curl https://api.bodhan.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_BODHAN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "indic-translate",
    "messages": [
      {"role": "user", "content": "Class starts at nine."}
    ],
    "source_language_code": "en",
    "target_language_code": "kn"
  }'

Models

Set model in the request to one of these. The base URL is the same for all four.

Indic-Transcribe

{
  "model": "indic-transcribe",
  
}

Speech to text that copes with accents, dialects and mid-sentence switches between languages. Output in native or Roman script.

  • 25+ Indian languages and English
  • Handles accent and code-switching

Indic-Translate

{
  "model": "indic-translate",
  
}

Translation between English and the 22 scheduled Indian languages. Markdown, LaTeX, code and tables come through intact.

  • 22 Indian languages + English
  • 44 directions
  • 32K-token context

Indic-Speak

{
  "model": "indic-speak",
  
}

Reads Indian-language, English or mixed text aloud, in native or Latin script, numbers and notation included.

  • 45 voices
  • 22 Indian languages + English
  • 14 speaking styles
  • ~200 ms time to first audio

Indic-OCR

{
  "model": "indic-ocr",
  
}

Pulls text and structure out of printed or handwritten pages, with reading order, equations and tables kept.

  • 22 Indian languages + English
  • Printed and handwritten text
  • Equations as LaTeX
  • Tables as HTML or Markdown

Pricing

Add credit in rupees and each call is charged against it. There is no subscription or minimum. The dashboard shows what you have spent.

ModelMetered perPrice
indic-transcribe
Speech to text
minute of input audio₹0.10 / audio minute
indic-translate
Machine translation
10,000 output tokens₹0.20 / 10K output tokens
indic-speak
Text to speech
10,000 input characters₹6 / 10K characters
indic-ocr
Document OCR, whole page to markdown
image₹0.20 / image

Each key has a requests-per-minute allowance on its model. Top-ups are capped at ₹5,000 per payment.

Quickstart

Create an account, create a key, then point your client at the base URL below.

Base URL: https://api.bodhan.ai/v1 · Auth: Authorization: Bearer <your key>

Keys are per model. To rotate one, delete it and make a new one.

The /v1 routes keep the OpenAI request and response shapes, so the SDK you already use works once its base URL points at Bodhan.

from openai import OpenAI

client = OpenAI(
    base_url="https://api.bodhan.ai/v1",
    api_key="YOUR_BODHAN_KEY",
)

# Translation
r = client.chat.completions.create(
    model="indic-translate",
    messages=[{"role": "user", "content": "Good morning"}],
    extra_body={"source_language_code": "en", "target_language_code": "te"},
)

# Speech to text
t = client.audio.transcriptions.create(
    model="indic-transcribe", file=open("lesson.wav", "rb"),
)

# Document OCR: a page image in, Markdown in reading order out
o = client.chat.completions.create(
    model="indic-ocr",
    messages=[{"role": "user", "content": [
        {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}},
    ]}],
)
print(o.choices[0].message.content)

For OCR, the reference has the full response shape and the layout blocks it returns.

Or with curl:

curl https://api.bodhan.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_BODHAN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"indic-translate","messages":[{"role":"user","content":"Welcome"}],"source_language_code":"en","target_language_code":"hi"}'

Limits

Each key has a requests-per-minute allowance on its model:

Model Requests per minute
indic-translate 8
indic-transcribe 8
indic-ocr 4
indic-speak 4

Over the allowance you get HTTP 429 with a retry-after header saying how many seconds until a slot frees up; the window slides. Running out of credit also returns 429, with a different message. If you need more throughput, write to support.