---
title: "New job from a retryable terminal failure"
method: POST
path: "/v1/jobs/{id}/retry"
tags: ["jobs"]
---

# New job from a retryable terminal failure

`POST /v1/jobs/{id}/retry`

## Request

- Base URL: `https://api.transcriptdock.com`
- URL: `https://api.transcriptdock.com/v1/jobs/{id}/retry`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `sb-access-token`

## Path parameters

- `id` string, uuid, required

## Headers

- `Idempotency-Key` string, required

## Request body

- JobRetryRequest
  - `max_credits` integer: New ceiling in credits; defaults to the original job ceiling.

## Response `200`

Same retry idempotency key replayed

- Job
  - `id` string, uuid, required: Job id; use with GET /v1/jobs/{id}.
  - `status` 'queued' | 'processing' | 'awaiting_provider' | 'succeeded' | 'failed' | 'cancelled', required
  - `stage` 'resolve' | 'captions' | 'acquire_audio' | 'submit_asr' | 'wait_asr' | 'finalize' | 'null', nullable, required: Current pipeline step while in flight; null once final.
  - `result_id` string, uuid, nullable, required: Transcript id once status is succeeded; fetch with GET /v1/transcripts/{id}. Null otherwise.
  - `error` ErrorObject, required
    - `code` 'INVALID_REQUEST' | 'INVALID_URL' | 'INVALID_CURSOR' | 'UNSUPPORTED_SOURCE' | 'UNSUPPORTED_MEDIA' | 'CAPABILITY_UNAVAILABLE' | 'UNAUTHENTICATED' | 'FORBIDDEN' | 'EMAIL_UNVERIFIED' | 'NOT_FOUND' | 'INSUFFICIENT_BALANCE' | 'PLAN_REQUIRED' | 'BUDGET_EXCEEDED' | 'IDEMPOTENCY_CONFLICT' | 'JOB_NOT_RETRYABLE' | 'CANCELLATION_NOT_ALLOWED' | 'RATE_LIMITED' | 'SOURCE_NOT_FOUND' | 'SOURCE_PRIVATE' | 'SOURCE_AUTH_REQUIRED' | 'SOURCE_REGION_RESTRICTED' | 'NO_CAPTIONS' | 'LANGUAGE_UNAVAILABLE' | 'LANGUAGE_UNSUPPORTED' | 'NO_SPEECH' | 'NO_AUDIO' | 'TIMESTAMPS_UNAVAILABLE' | 'DURATION_LIMIT_EXCEEDED' | 'FILE_TOO_LARGE' | 'UNSAFE_URL' | 'INVALID_MEDIA' | 'SOURCE_RATE_LIMITED' | 'SOURCE_BLOCKED' | 'SOURCE_TIMEOUT' | 'SOURCE_CHANGED' | 'PROVIDER_UNAVAILABLE' | 'STORAGE_UNAVAILABLE' | 'PROVIDER_REJECTED' | 'INTERNAL_ERROR', required
    - `message` string, required
    - `retryable` boolean, required
    - `retry_after_seconds` integer
    - `details` object
    - `doc_url` string, uri: Where this code is documented.
  - `billing` JobBilling, required
    - `credits_reserved` integer, required: Credits held while the job runs; released or settled when it finishes.
    - `credits_charged` integer, required: Credits charged after settlement (0 until the job finishes). 1 for a caption transcript, transcribe_credits_per_minute per started minute for AI transcription, 0 for a cached result.
    - `kind` 'captions' | 'ai_transcription' | 'cached', required: What the job paid for: captions (1 credit), ai_transcription (per minute), or cached (a reused result, free within the workspace).
  - `source` object
    - `platform` 'youtube' | 'tiktok' | 'instagram' | 'upload' | 'direct', required
    - `media_id` string, nullable, required
    - `canonical_url` string, nullable, required
    - `title` string, nullable, required
    - `upload_id` string, nullable, required
  - `options` object
    - `mode` 'captions_only' | 'auto' | 'transcribe', required
    - `language` string, nullable, required
    - `caption_preference` string, required
  - `created_at` string, date-time, required: Submission time, UTC.

## Other responses

- `202`: Retry accepted as a new job

---

[API](https://skmtc.dev/transcriptdock/apis/transcriptdock-api.md) · [All operations](https://skmtc.dev/transcriptdock/apis/transcriptdock-api/llms.txt) · [OpenAPI document](https://skmtc.dev/transcriptdock/apis/transcriptdock-api/revisions/7bda7594bdfd?raw)
