> ## Documentation Index
> Fetch the complete documentation index at: https://docs.screenframed.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Jobs

Inspect queued async capture jobs and webhook delivery status.

**Get job status**

Returns the status, result, error, and webhook state for an async capture job.

## Request

**id**

Async job id returned from `POST /v1/capture` when `async: true`.

```bash
curl "https://screenframed.com/v1/jobs/job_01K..." \
  -H "Authorization: Bearer $SCREENFRAMED_API_KEY"
```

## Response

**status**

Current job status: `pending`, `completed`, or `failed`.

**result**

Completed capture result. `null` until the job completes.

**error**

Failure message for failed jobs.

**Completed**

```json
{
  "id": "job_01K...",
  "status": "completed",
  "result": {
    "id": "cap_01K...",
    "url": "https://cdn.screenframed.com/r/cap_01K....png",
    "width": 1600,
    "height": 900,
    "format": "png",
    "credits_used": 3
  },
  "error": null,
  "webhook_url": "https://example.com/webhooks/screenframed",
  "webhook_status": "delivered",
  "created_at": "2026-04-27 15:00:00",
  "completed_at": "2026-04-27 15:00:04"
}
```

` GET /v1/jobs/{id} `

Get async job status

## Servers

- ` https://screenframed.com ` — Production

## Authentication

The operation accepts these alternatives. Schemes within one alternative are required together.

### Alternative 1

- ` bearerAuth `: ` http `

  - HTTP scheme: ` bearer `

  - ScreenFramed API key, such as `sf_live_...`.

## Parameters

### ` id ` (path, required)

- ` value `: type ` string `

  - pattern: ` "^job_" `

## Responses

### ` 200 ` — Job status

Content type: ` application/json `

- ` value `: type ` object `

  - ` id `: type ` string `

  - ` status `: type ` string `

    - enum: ` ["pending","completed","failed"] `

  - ` result `: type ` object `

    - ` id `: type ` string `

      - pattern: ` "^cap_" `

    - ` url `: type ` string `; format ` uri `

    - ` width `: type ` integer `

    - ` height `: type ` integer `

    - ` format `: type ` string `

    - ` duration_ms `: type ` integer `

    - ` credits_used `: type ` integer `

    - ` cached `: type ` boolean `

    - ` warnings `: type ` array `

      - ` array item `: type ` string `

    - ` created_at `: type ` string `

    - ` resolved_params `: type ` object `

    - ` ai_decisions `: type ` object `

    - ` element_resolved `: type ` object `

  - ` error `: type ` string `; nullable

  - ` webhook_url `: type ` string `; nullable; format ` uri `

  - ` webhook_status `: type ` string `; nullable

  - ` created_at `: type ` string `

  - ` completed_at `: type ` string `; nullable

### ` 401 ` — Error response

Content type: ` application/json `

- ` value `: type ` object `

  - Required fields: ` error `

  - ` error `: type ` object `

    - Required fields: ` code `, ` message `

    - ` code `: type ` string `

    - ` message `: type ` string `

    - ` details `: type ` object `

    - ` retry_after `: type ` integer `

### ` 403 ` — Error response

Content type: ` application/json `

- ` value `: type ` object `

  - Required fields: ` error `

  - ` error `: type ` object `

    - Required fields: ` code `, ` message `

    - ` code `: type ` string `

    - ` message `: type ` string `

    - ` details `: type ` object `

    - ` retry_after `: type ` integer `

### ` 404 ` — Error response

Content type: ` application/json `

- ` value `: type ` object `

  - Required fields: ` error `

  - ` error `: type ` object `

    - Required fields: ` code `, ` message `

    - ` code `: type ` string `

    - ` message `: type ` string `

    - ` details `: type ` object `

    - ` retry_after `: type ` integer `

## Request examples

### cURL

```curl
curl -X GET 'https://screenframed.com/v1/jobs/string' \
  -H 'Authorization: Bearer YOUR_API_TOKEN'
```

### JavaScript

```javascript
const response = await fetch('https://screenframed.com/v1/jobs/string', {
  method: 'GET',
  headers: {
      "Authorization": "Bearer YOUR_API_TOKEN"
  }
});

const data = await response.json();
console.log(data);
```

### Python

```python
import requests

headers = {
    'Authorization': 'Bearer YOUR_API_TOKEN'
}

response = requests.get('https://screenframed.com/v1/jobs/string', headers=headers)
print(response.json())
```