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

# Get Status

GET https://api.sarvam.ai/doc-digitization/job/v1/{job_id}/status

**Legacy API.** The `/doc-digitization/job/v1` endpoints remain available for existing integrations. For new integrations, use the Document Intelligence API under `/doc-ai/v1`.

Returns the current status of a job with page-level metrics.

**Job States:**
- `Accepted`: Job created, awaiting file upload
- `Pending`: File uploaded, waiting to start
- `Running`: Processing in progress
- `Completed`: All pages processed successfully
- `PartiallyCompleted`: Some pages succeeded, some failed
- `Failed`: All pages failed or job-level error

**Page Metrics:**
Response includes detailed progress: total pages, pages processed, succeeded, failed, and per-page errors.

Reference: https://docs.sarvam.ai/api-reference/legacy/document-intelligence/get-status

## Authentication

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

## Request

### Path parameters

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

## Response

### 200

Successful Response

- `job_id` (string, required) — Job identifier (UUID)
- `job_state` (enum, required) — Current job state
  - Allowed values: `Accepted`, `Pending`, `Running`, `Completed`, `PartiallyCompleted`, `Failed`
- `created_at` (string, required) — Job creation timestamp (ISO 8601)
- `updated_at` (string, required) — Last update timestamp (ISO 8601)
- `storage_container_type` (enum, required) — Storage backend type
  - Allowed values: `Azure`, `Local`, `Google`, `Azure_V1`
- `total_files` (integer, optional, default: 0) — Total input files (always 1)
- `successful_files_count` (integer, optional, default: 0) — Files that completed successfully
- `failed_files_count` (integer, optional, default: 0) — Files that failed
- `error_message` (string, optional, default: ) — Job-level error message
- `job_details` (list of object, optional) — Per-file processing details with page metrics
  - `inputs` (list of object, required) — Input file(s) for this task
    - `file_name` (string, required)
    - `file_id` (string, required)
  - `outputs` (list of object, required) — Output file(s) produced
    - `file_name` (string, required)
    - `file_id` (string, required)
  - `state` (enum, required) — Processing state for this file
    - Allowed values: `Pending`, `Running`, `Success`, `PartialSuccess`, `Failed`
  - `total_pages` (integer, optional, default: 0) — Total pages/images in the input file
  - `pages_processed` (integer, optional, default: 0) — Number of pages processed so far
  - `pages_succeeded` (integer, optional, default: 0) — Number of pages successfully processed
  - `pages_failed` (integer, optional, default: 0) — Number of pages that failed processing
  - `error_message` (string, optional, default: ) — Error message if processing failed
  - `error_code` (string, optional, nullable) — Standardized error code if failed
  - `page_errors` (list of object, optional) — Detailed errors for each failed page
    - `page_number` (integer, required) — Page number that failed
    - `error_code` (string, required) — Standardized error code
    - `error_message` (string, required) — Human-readable error description

## Examples

**Response**

```json
{
  "job_id": "string",
  "job_state": "Accepted",
  "created_at": "2024-01-15T09:30:00Z",
  "updated_at": "2024-01-15T09:30:00Z",
  "storage_container_type": "Azure",
  "total_files": 0,
  "successful_files_count": 0,
  "failed_files_count": 0,
  "error_message": "",
  "job_details": [
    {
      "inputs": [
        {
          "file_name": "string",
          "file_id": "string"
        }
      ],
      "outputs": [
        {
          "file_name": "string",
          "file_id": "string"
        }
      ],
      "state": "Pending",
      "total_pages": 0,
      "pages_processed": 0,
      "pages_succeeded": 0,
      "pages_failed": 0,
      "error_message": "",
      "error_code": "string",
      "page_errors": [
        {
          "page_number": 1,
          "error_code": "string",
          "error_message": "string"
        }
      ]
    }
  ]
}
```

**SDK Code**

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

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

```

```python
from sarvamai import SarvamAI

client = SarvamAI(
    api_subscription_key="YOUR_API_KEY_HERE",
)

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

```

```go
package main

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

func main() {

	url := "https://api.sarvam.ai/doc-digitization/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
require 'uri'
require 'net/http'

url = URI("https://api.sarvam.ai/doc-digitization/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
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

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

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

$client = new \GuzzleHttp\Client();

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

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

```csharp
using RestSharp;

var client = new RestClient("https://api.sarvam.ai/doc-digitization/job/v1/job_id/status");
var request = new RestRequest(Method.GET);
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/doc-digitization/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()
```