> 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.

# Trigger Export

POST https://api.sarvam.ai/translate/document/jobs/{job_id}/export

Enqueue an async export for one target language in the requested format.

Returns `202 Accepted` with `export_state=Pending`. Poll `GET /translate/document/jobs/{job_id}/export/status` until `export_state` is `Completed`, then download from `download_url`.

* PDF/DOCX uploads support cross-format export (`pdf`, `docx`, `html`, `txt`, `epub`).
* Office uploads (xlsx, pptx, docx) export in the original format only.
* Optional `fit_line_height` / `fit_font_shrink` tune PDF/DOCX shrink-to-fit.
* Returns `409` when an export for the same language and format is already `Pending` or `Running`.

Reference: https://docs.sarvam.ai/api-reference/translate-document/doc-translation-trigger-export

## Authentication

- `api-subscription-key` header (required)

## Request

### Path parameters

- `job_id` (string, required) — The `job_id` returned by POST /translate/document/jobs.

### Query parameters

- `lang` (enum, required) — BCP-47 target language code (e.g. `hi-IN`).
  - Allowed values: `as-IN`, `bn-IN`, `brx-IN`, `doi-IN`, `en-IN`, `gu-IN`, `hi-IN`, `kn-IN`, `ks-IN`, `kok-IN`, `mai-IN`, `ml-IN`, `mni-IN`, `mr-IN`, `ne-IN`, `or-IN`, `pa-IN`, `sa-IN`, `sat-IN`, `sd-IN`, `ta-IN`, `te-IN`, `ur-IN`
- `format` (enum, required) — Target export format. PDF/DOCX jobs: `pdf`, `docx`, `html`, `txt`, or `epub`. Office formats export in the source file's native format.
  - Allowed values: `pdf`, `docx`, `html`, `txt`, `epub`
- `fit_line_height` (boolean, optional) — When true, the export may reduce line spacing to fit translated text within the original layout. PDF/DOCX only.
- `fit_font_shrink` (boolean, optional) — When true, the export may reduce font size to fit translated text within the original layout. PDF/DOCX only.

## Response

### 202

Export enqueued.

- `export_id` (string, required) — Unique export job identifier.
- `job_id` (string, required) — The job this export belongs to.
- `target_language_code` (string, required) — BCP-47 code of the exported file.
- `format` (string, required) — Output format (e.g. pdf, docx, xlsx).
- `export_state` (enum, required) — Current state of the export: `Pending`, `Running`, `Completed`, or `Failed`.
  - Allowed values: `Pending`, `Running`, `Completed`, `Failed`
- `created_at` (string, required) — Export creation timestamp.
- `download_url` (string, optional, nullable) — Signed download URL when export_state is Completed.
- `filename` (string, optional, nullable) — Output filename.
- `file_size` (integer, optional, nullable) — Output file size in bytes.
- `expires_in_hours` (integer, optional, nullable) — Hours until the download URL expires.
- `error_message` (string, optional, nullable) — Sanitized failure reason when export_state is Failed.
- `completed_at` (string, optional, nullable) — Export completion timestamp. Present when `export_state` is `Completed` or `Failed`.
- `progress` (integer, optional, nullable) — 0–100 for PDF/DOCX page render; omitted for other formats.
- `pages_completed` (integer, optional, nullable) — Pages rendered so far (PDF/DOCX with page-level render).
- `pages_total` (integer, optional, nullable) — Total pages in the export render pass.

## Examples

**Response**

```json
{
  "export_id": "exp_1a2b3c4d",
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "target_language_code": "hi-IN",
  "format": "pdf",
  "export_state": "Pending",
  "created_at": "2026-08-04T10:10:00Z"
}
```

**SDK Code**

```python
from sarvamai import SarvamAI

client = SarvamAI(api_subscription_key="YOUR_SARVAM_API_KEY")

export = client.document_translation.trigger_export(
    job_id="550e8400-e29b-41d4-a716-446655440000",
    lang="hi-IN",
    format="pdf",
)
print(f"export_id={export.export_id} state={export.export_state}")

```

```python
from sarvamai import SarvamAI

client = SarvamAI(
    api_subscription_key="YOUR_API_KEY_HERE",
)

client.document_translation.trigger_export(
    job_id="550e8400-e29b-41d4-a716-446655440000",
    format="pdf",
    lang="hi-IN",
)

```

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

const client = new SarvamAIClient({
  apiSubscriptionKey: process.env.SARVAM_API_KEY,
});

const jobId = "550e8400-e29b-41d4-a716-446655440000";

const exportJob = await client.documentTranslation.triggerExport(jobId, {
  lang: "hi-IN",
  format: "pdf",
});
console.log(`export_id=${exportJob.export_id} state=${exportJob.export_state}`);

```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.sarvam.ai/translate/document/jobs/550e8400-e29b-41d4-a716-446655440000/export?format=pdf&lang=hi-IN"

	req, _ := http.NewRequest("POST", url, nil)

	req.Header.Add("api-subscription-key", "<apiSubscriptionKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.sarvam.ai/translate/document/jobs/550e8400-e29b-41d4-a716-446655440000/export?format=pdf&lang=hi-IN")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["api-subscription-key"] = '<apiSubscriptionKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.sarvam.ai/translate/document/jobs/550e8400-e29b-41d4-a716-446655440000/export?format=pdf&lang=hi-IN")
  .header("api-subscription-key", "<apiSubscriptionKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.sarvam.ai/translate/document/jobs/550e8400-e29b-41d4-a716-446655440000/export?format=pdf&lang=hi-IN', [
  'headers' => [
    'api-subscription-key' => '<apiSubscriptionKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.sarvam.ai/translate/document/jobs/550e8400-e29b-41d4-a716-446655440000/export?format=pdf&lang=hi-IN");
var request = new RestRequest(Method.POST);
request.AddHeader("api-subscription-key", "<apiSubscriptionKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["api-subscription-key": "<apiSubscriptionKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.sarvam.ai/translate/document/jobs/550e8400-e29b-41d4-a716-446655440000/export?format=pdf&lang=hi-IN")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```