> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs-dev.ltx.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs-dev.ltx.io/_mcp/server.

# Get job status

GET https://api.ltx.io/v2/{endpoint}/{id}

Poll the status of an async generation job. Status transitions through `pending` → `processing` → `completed` or `failed`. When completed, the `result` object contains output URLs (see each endpoint's documentation for the available keys).

We recommend waiting at least 5 seconds between polls. Choose a slightly different delay each time, for example between 5 and 6 seconds, to spread out requests when polling multiple jobs. Stop when the status reaches `completed` or `failed`.

Job status is available for up to 24 hours after the job reaches a terminal state, and can be removed sooner. Once a job is removed, this endpoint returns `404`. Output URLs expire independently of job status; download or re-host outputs as soon as the job completes. See [retention](/async-jobs#retention).


Reference: https://docs-dev.ltx.io/api-documentation/api-reference/async-video-generation/get-job-status

## Authentication

- `Authorization` header (bearer token, required) — API key authentication

## Request

### Path parameters

- `id` (string, required) — Job ID returned from the submit endpoint.
- `endpoint` (enum, required) — The endpoint type used when submitting the job (e.g., `text-to-video`, `image-to-video`, `audio-to-video`, `retake`, `extend`, `video-to-video-hdr`, `video-to-video-reframe`).
  - Allowed values: `text-to-video`, `image-to-video`, `audio-to-video`, `retake`, `extend`, `video-to-video-hdr`, `video-to-video-reframe`

## Response

### 200

Current job status

- `V2JobStatusResponse`
  - `status`: `pending` (pending)
    - `created_at` (datetime, required)
    - `id` (string, required)
  - `status`: `processing` (processing)
    - `created_at` (datetime, required)
    - `id` (string, required)
  - `status`: `completed` (completed)
    - `completed_at` (datetime, required) — ISO 8601 timestamp of when the job completed.
    - `created_at` (datetime, required)
    - `id` (string, required)
    - `result` (map from string to string, required) — Result object for a completed job. Contains output URLs — the available keys depend on the endpoint. Output URLs expire independently of job-status retention. Download or re-host outputs as soon as the job completes. See [retention](/async-jobs#retention).
  - `status`: `failed` (failed)
    - `completed_at` (datetime, required) — ISO 8601 timestamp of when the job failed.
    - `created_at` (datetime, required)
    - `error` (V2JobError, required) — Error details for a failed job. Uses the same error types as HTTP error responses (`api_error`, `content_filtered_error`, `insufficient_funds_error`, etc.).
    - `id` (string, required)

## Errors

### 401 Unauthorized Error

Authentication failed

- `type` (enum, required) — Response type indicator
  - Allowed values: `error`
- `error` (ErrorError, required)

### 404 Not Found Error

Resource not found

- `type` (enum, required) — Response type indicator
  - Allowed values: `error`
- `error` (ErrorError, required)

### 500 Internal Server Error

An unexpected error occurred

- `type` (enum, required) — Response type indicator
  - Allowed values: `error`
- `error` (ErrorError, required)

## Types

### V2JobError

Error details for a failed job. Uses the same error types as HTTP error responses (`api_error`, `content_filtered_error`, `insufficient_funds_error`, etc.).

- `type` (string, required) — Error type for programmatic handling. Same values as HTTP error types.
- `message` (string, required) — Human-readable error description.

### ErrorError

- `type` (string, required) — Error type for programmatic handling
- `message` (string, required) — Human-readable error description

## Examples

**SDK Code**

```python
import requests

status = requests.get(
    "https://api.ltx.io/v2/text-to-video/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    headers={"Authorization": "Bearer YOUR_API_KEY"}
).json()

print(status["status"])  # pending, processing, completed, or failed

```

```typescript
const response = await fetch(
  "https://api.ltx.io/v2/text-to-video/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  { headers: { "Authorization": "Bearer YOUR_API_KEY" } }
);
const status = await response.json();
console.log(status.status); // pending, processing, completed, or failed

```

```go
package main

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

func main() {

	url := "https://api.ltx.io/v2/text-to-video/a1b2c3d4-e5f6-7890-abcd-ef1234567890"

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

	req.Header.Add("Authorization", "Bearer <token>")

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

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

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

}
```

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

HttpResponse<String> response = Unirest.get("https://api.ltx.io/v2/text-to-video/a1b2c3d4-e5f6-7890-abcd-ef1234567890")
  .header("Authorization", "Bearer <token>")
  .asString();
```