> For clean Markdown of any page, append `.md` to the page URL.
> For a complete documentation index, see https://docs.sarvam.ai/llms.txt.
> For full documentation content in one file, see https://docs.sarvam.ai/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.sarvam.ai/_mcp/server.

# Text Translation API

> Complete overview of Sarvam AI Text Translation API supporting English to Indian languages and vice versa with multiple translation modes and high accuracy.

## Translation Types

Translate from English to various Indian languages with support for
different translation modes.

{" "}

Convert Indian languages to English with high accuracy and natural output.

Translate between different Indian languages while preserving context and
meaning.

## Translation Modes

Highly professional, uses pure language forms. Ideal for official documents
and legal papers.

{" "}

Balanced mix of languages, slightly informal. Perfect for business emails and
general communication.

Casual and direct style with mixed language. Best for chatbots and social
media content.

## Code Examples

```python
from sarvamai import SarvamAI

client = SarvamAI(
    api_subscription_key="YOUR_SARVAM_API_KEY"
)

response = client.text.translate(
    input="Hello, how are you?",
    source_language_code="en-IN",
    target_language_code="hi-IN",
    speaker_gender="Male"
)

print(response)
```

```javascript
import { SarvamAIClient } from "sarvamai";

const client = new SarvamAIClient({
    apiSubscriptionKey: "YOUR_SARVAM_API_KEY"
});

const response = await client.text.translate({
    input: "Hello, how are you?",
    source_language_code: "en-IN",
    target_language_code: "hi-IN",
    speaker_gender: "Male"
});

console.log(response);
```

```bash
curl -X POST https://api.sarvam.ai/translate \
  -H "api-subscription-key: <YOUR_SARVAM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Hello, how are you?",
    "source_language_code": "en-IN",
    "target_language_code": "hi-IN",
    "speaker_gender": "Male"
  }'
```

<h3>
  Advanced Translation Features
</h3>

<p>
  Explore different parameters to customize your translation output:
</p>

<p>
  Choose between Male and Female voice characteristics for gender-specific translations.
</p>

```python
response = client.text.translate(
    input="Welcome to our service!",
    source_language_code="en-IN",
    target_language_code="hi-IN",
    model="mayura:v1",
    speaker_gender="Female"
)
```

```javascript
const response = await client.text.translate({
    input: "Welcome to our service!",
    source_language_code: "en-IN",
    target_language_code: "hi-IN",
    model: "mayura:v1",
    speaker_gender: "Female"
});
```

```bash
curl -X POST https://api.sarvam.ai/translate \
  -H "api-subscription-key: <YOUR_SARVAM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Hello, how are you?",
    "source_language_code": "en-IN",
    "target_language_code": "hi-IN",
    "speaker_gender": "Female"
  }'
```

<p>
  Select the tone and style of translation - formal, modern-colloquial, or classic-colloquial for different use cases.
</p>

```python
response = client.text.translate(
    input="Welcome to our service!",
    source_language_code="en-IN",
    target_language_code="hi-IN",
    model="mayura:v1",
    mode="modern-colloquial"
)
```

```javascript
const response = await client.text.translate({
    input: "Welcome to our service!",
    source_language_code: "en-IN",
    target_language_code: "hi-IN",
    model: "mayura:v1",
    mode: "modern-colloquial"
});
```

```bash
curl -X POST https://api.sarvam.ai/translate \
  -H "api-subscription-key: <YOUR_SARVAM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Welcome to our service!",
    "source_language_code": "en-IN",
    "target_language_code": "hi-IN",
    "model": "mayura:v1",
    "mode": "modern-colloquial"
  }'
```

<p>
  Choose between different script options (roman/fully-native/spoken-form-in-native) for the translated text output.
</p>

```python
response = client.text.translate(
    input="Welcome to our service!",
    source_language_code="en-IN",
    target_language_code="hi-IN",
    model="mayura:v1",
    output_script="fully-native"
)
```

```javascript
const response = await client.text.translate({
    input: "Welcome to our service!",
    source_language_code: "en-IN",
    target_language_code: "hi-IN",
    model: "mayura:v1",
    output_script: "fully-native"
});
```

```bash
curl -X POST https://api.sarvam.ai/translate \
  -H "api-subscription-key: <YOUR_SARVAM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Welcome to our service!",
    "source_language_code": "en-IN",
    "target_language_code": "hi-IN",
    "model": "mayura:v1",
    "output_script": "fully-native"
  }'
```

<p>
  Specify the format for numbers in the output - choose between international (1,2,3) or native numerals (१,२,३).
</p>

```python
response = client.text.translate(
    input="Welcome to our service!",
    source_language_code="en-IN",
    target_language_code="hi-IN",
    model="mayura:v1",
    numerals_format="native"
)
```

```javascript
const response = await client.text.translate({
    input: "Welcome to our service!",
    source_language_code: "en-IN",
    target_language_code: "hi-IN",
    model: "mayura:v1",
    numerals_format: "native"
});
```

```bash
curl -X POST https://api.sarvam.ai/translate \
  -H "api-subscription-key: <YOUR_SARVAM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Welcome to our service!",
    "source_language_code": "en-IN",
    "target_language_code": "hi-IN",
    "model": "mayura:v1",
    "numerals_format": "native"
  }'
```

<p>
  Example using all available parameters together for maximum customization.
</p>

```python
response = client.text.translate(
    input="Welcome to our service!",
    source_language_code="en-IN",
    target_language_code="hi-IN",
    model="mayura:v1",
    speaker_gender="Female",
    mode="modern-colloquial",
    output_script="fully-native",
    numerals_format="native"
)
```

```javascript
const response = await client.text.translate({
    input: "Welcome to our service!",
    source_language_code: "en-IN",
    target_language_code: "hi-IN",
    model: "mayura:v1",
    speaker_gender: "Female",
    mode: "modern-colloquial",
    output_script: "fully-native",
    numerals_format: "native"
});
```

```bash
curl -X POST https://api.sarvam.ai/translate \
  -H "api-subscription-key: <YOUR_SARVAM_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Welcome to Sarvam AI!",
    "source_language_code": "en-IN",
    "target_language_code": "hi-IN",
    "model": "mayura:v1",
    "speaker_gender": "Female",
    "mode": "modern-colloquial",
    "output_script": "fully-native",
    "numerals_format": "native"
  }'
```

## API Features

* Multiple Indian languages support
* Three translation modes
* Gender-specific translations
* Code-mixed text support

{" "}

* Multiple script options
* Native/International numerals
* Customizable formatting
* Transliteration support

{" "}

* Automatic language detection
* Context preservation
* Entity handling

## API Response Format

| Field                  | Type   | Description                                          |
| ---------------------- | ------ | ---------------------------------------------------- |
| `request_id`           | string | Unique identifier for the request                    |
| `translated_text`      | string | Translated text in the target language               |
| `source_language_code` | string | Detected or provided source language (BCP-47 format) |

**Supported languages:**

* **mayura:v1:** `bn-IN`, `en-IN`, `gu-IN`, `hi-IN`, `kn-IN`, `ml-IN`, `mr-IN`, `od-IN`, `pa-IN`, `ta-IN`, `te-IN`
* **sarvam-translate:v1:** All mayura languages + `as-IN`, `brx-IN`, `doi-IN`, `kok-IN`, `ks-IN`, `mai-IN`, `mni-IN`, `ne-IN`, `sa-IN`, `sat-IN`, `sd-IN`, `ur-IN`

```json
{
  "request_id": "20241115_12345678-1234-5678-1234-567812345678",
  "translated_text": "नमस्ते, आप कैसे हैं?",
  "source_language_code": "en-IN"
}
```

**With Roman Script Output:**

```json
{
  "request_id": "20241115_12345678-1234-5678-1234-567812345678",
  "translated_text": "namaste, aap kaise hain?",
  "source_language_code": "en-IN"
}
```

**With Native Numerals:**

```json
{
  "request_id": "20241115_12345678-1234-5678-1234-567812345678",
  "translated_text": "मेरा फोन नंबर है ९८४०९५०९५०",
  "source_language_code": "en-IN"
}
```

**Auto-Detected Source Language:**

```json
{
  "request_id": "20241115_12345678-1234-5678-1234-567812345678",
  "translated_text": "Hello, how are you?",
  "source_language_code": "hi-IN"
}
```

## Error Responses

All errors return a JSON object with an `error` field containing details about what went wrong.

### Error Response Structure

```json
{
  "error": {
    "message": "Human-readable error description",
    "code": "error_code_for_programmatic_handling",
    "request_id": "unique_request_identifier"
  }
}
```

### Error Codes Reference

| HTTP Status | Error Code                   | When This Happens                                | What To Do                                                                 |
| ----------- | ---------------------------- | ------------------------------------------------ | -------------------------------------------------------------------------- |
| `400`       | `invalid_request_error`      | Missing required parameters or malformed request | Check `input`, `source_language_code`, `target_language_code`              |
| `403`       | `invalid_api_key_error`      | API key is invalid, missing, or expired          | Verify your API key in the dashboard                                       |
| `422`       | `unprocessable_entity_error` | Text too long or unsupported language pair       | Keep text under 1000 chars (mayura:v1) or 2000 chars (sarvam-translate:v1) |
| `429`       | `insufficient_quota_error`   | API quota or rate limit exceeded                 | Wait for reset or upgrade your plan                                        |
| `500`       | `internal_server_error`      | Unexpected server error                          | Retry the request; contact support if persistent                           |

### Example Error Response

```json
{
  "error": {
    "message": "Input text exceeds maximum length of 1000 characters for mayura:v1",
    "code": "unprocessable_entity_error",
    "request_id": "20241115_abc12345"
  }
}
```

```python
from sarvamai import SarvamAI
from sarvamai.core.api_error import ApiError

client = SarvamAI(api_subscription_key="YOUR_SARVAM_API_KEY")

try:
    response = client.text.translate(
        input="Hello, how are you?",
        source_language_code="en-IN",
        target_language_code="hi-IN"
    )
    print(response.translated_text)
except ApiError as e:
    if e.status_code == 400:
        print(f"Bad request: {e.body}")
    elif e.status_code == 403:
        print("Invalid API key. Check your credentials.")
    elif e.status_code == 422:
        print(f"Invalid parameters: {e.body}")
    elif e.status_code == 429:
        print("Rate limit exceeded. Wait and retry.")
    else:
        print(f"Error {e.status_code}: {e.body}")
```

Check out our detailed [API Reference](/api-reference-docs/text/translate-text)
to explore Translation and all available options.

Need help with translation? Contact us on
[discord](https://discord.com/invite/5rAsykttcs) for guidance.