# Get job status — Shorty API

> Returns the status of an async job the authenticated account started (a summary, transcription, or subtitle job created via a POST here). The body is the canonical nested job-status shape used across every Shorty surface. A non-existent or foreign job id returns 404. A transcription created with `output_language` reports SUCCESS when the transcript is ready, before its translation is done: keep polling GET /v1/transcriptions/{transcriptionId} until `translation_status` is SUCCEEDED, FAILED or SKIPPED.

```http
GET /v1/jobs/{jobId}
```

Returns the status of an async job the authenticated account started (a summary, transcription, or subtitle job created via a POST here). The body is the canonical nested job-status shape used across every Shorty surface. A non-existent or foreign job id returns 404. A transcription created with `output_language` reports SUCCESS when the transcript is ready, before its translation is done: keep polling GET /v1/transcriptions/{transcriptionId} until `translation_status` is SUCCEEDED, FAILED or SKIPPED.

## Authentication

Requires a Bearer credential — a `shk_live_` API key or an OAuth 2.1 access token with the scope for this resource. See [Authentication](/docs/api).

## Parameters

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `jobId` | path | Yes | — |

## Example request

curl:

```bash
curl -X GET https://aishorty.com/v1/jobs/{jobId} \
  -H "Authorization: Bearer shk_live_your_key"
```

TypeScript (@aishorty/sdk):

```typescript
import { Shorty } from '@aishorty/sdk'

const shorty = new Shorty({ apiKey: process.env.SHORTY_API_KEY })

const job = await shorty.jobs.get(jobId)
console.log(job.status, job.progress, job.output)
```

## Response · 200

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `jobId` | `string` | Yes | The job id. |
| `status` | `string` | Yes | Un-normalized status string (queued / processing / success / error / cancelled). |
| `progress` | `number` | No | Completion fraction 0–100, when known. |
| `step` | `string or null` | No | Human-readable current step, or null. |
| `error` | `string or null` | No | Error message if the job failed, or null. |
| `output` | `object` | No | Job-type-specific extras (e.g. jobType, title, outputId, articleId, transcriptionId). |

## Errors

On failure this endpoint returns an RFC 9457 problem body. Possible statuses:

- `400`
- `401`
- `403`
- `404`
- `429`
- `500`

Switch on the problem `code`, not the status. See the [error reference](/docs/api/errors) for every code and how to fix it.
