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

# Batch - Get Status

GET https://api.sarvam.ai/speech-to-text/job/v1/{job_id}/status

Retrieve the current status and details of a speech to text bulk job, including progress and file-level information.

**Rate Limiting Best Practice:** To prevent rate limit errors and ensure optimal server performance, we recommend implementing a minimum 5-millisecond delay between consecutive status polling requests. This helps maintain system stability while still providing timely status updates.

Reference: https://docs.sarvam.ai/api-reference/speech-to-text/stt/job/status

## Authentication

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

## Request

### Path parameters

- `job_id` (string, required) — The unique identifier of the job

### Headers

- `api-subscription-key` (string, optional, default: ) — Your unique subscription key for authenticating requests to the Sarvam AI Speech-to-Text API. [Here are the steps to get your api key](https://docs.sarvam.ai/api-reference-docs/authentication#obtaining-your-api-subscription-key)

## Response

### 200

Successful Response

- `job_state` (enum, required) — Job State
  - Allowed values: `Accepted`, `Pending`, `Running`, `Completed`, `Failed`
- `created_at` (string, required) — Created At
- `updated_at` (string, required) — Updated At
- `job_id` (string, required) — Job Id
- `storage_container_type` (enum, required) — Storage Container Type
  - Allowed values: `Azure`, `Local`, `Google`, `Azure_V1`
- `total_files` (integer, optional, default: 0) — Total Files
- `successful_files_count` (integer, optional, default: 0) — Success Count
- `failed_files_count` (integer, optional, default: 0) — Failed Count
- `error_message` (string, optional, default: ) — Error Message
- `job_details` (list of object, optional) — Job details at file level.
  - `inputs` (list of object, optional)
    - `file_name` (string, required)
    - `file_id` (string, required)
  - `outputs` (list of object, optional)
    - `file_name` (string, required)
    - `file_id` (string, required)
  - `state` (enum, optional)
    - Allowed values: `Success`, `API Error`, `Internal Server Error`
  - `error_message` (string, optional, nullable)
  - `exception_name` (string, optional, nullable)

## Examples

**Response**

```json
{
  "job_state": "Completed",
  "created_at": "2025-01-01T10:00:00Z",
  "updated_at": "2025-01-01T10:05:00Z",
  "job_id": "job_9f8b7c6d5e4a3b2c1d0e",
  "storage_container_type": "Azure_V1",
  "total_files": 1,
  "successful_files_count": 1,
  "failed_files_count": 0,
  "error_message": "",
  "job_details": [
    {
      "inputs": [
        {
          "file_name": "audio_001.wav",
          "file_id": "file-001"
        }
      ],
      "outputs": [
        {
          "file_name": "0.json",
          "file_id": "file-out-001"
        }
      ],
      "state": "Success",
      "error_message": null
    }
  ]
}
```

**SDK Code**

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

async function main() {
    const client = new SarvamAIClient({
        apiSubscriptionKey: "YOUR_API_KEY_HERE",
    });
    await client.speechToTextJob.getStatus("job_id");
}
main();

```

```python speechToTextJob_get_status_example
from sarvamai import SarvamAI

client = SarvamAI(
    api_subscription_key="YOUR_API_KEY_HERE",
)

client.speech_to_text_job.get_status(
    job_id="job_id",
)

```

```go speechToTextJob_get_status_example
package main

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

func main() {

	url := "https://api.sarvam.ai/speech-to-text/job/v1/job_id/status"

	req, _ := http.NewRequest("GET", 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 speechToTextJob_get_status_example
require 'uri'
require 'net/http'

url = URI("https://api.sarvam.ai/speech-to-text/job/v1/job_id/status")

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

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

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

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

HttpResponse<String> response = Unirest.get("https://api.sarvam.ai/speech-to-text/job/v1/job_id/status")
  .header("api-subscription-key", "<apiSubscriptionKey>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.sarvam.ai/speech-to-text/job/v1/job_id/status', [
  'headers' => [
    'api-subscription-key' => '<apiSubscriptionKey>',
  ],
]);

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

```csharp speechToTextJob_get_status_example
using RestSharp;

var client = new RestClient("https://api.sarvam.ai/speech-to-text/job/v1/job_id/status");
var request = new RestRequest(Method.GET);
request.AddHeader("api-subscription-key", "<apiSubscriptionKey>");
IRestResponse response = client.Execute(request);
```

```swift speechToTextJob_get_status_example
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.sarvam.ai/speech-to-text/job/v1/job_id/status")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
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()
```