---
title: "Create a QC job"
method: POST
path: "/v1/qc/jobs"
---

# Create a QC job

`POST /v1/qc/jobs`

## Request

- Base URL: `https://api.uploadcheck.app`
- URL: `https://api.uploadcheck.app/v1/qc/jobs`
- Auth: HTTP bearer

## Request body

- object
  - `youtube_url` string
  - `upload_id` string
  - `signed_url` string
  - `callback_url` string
  - `idempotency_key` string
  - `media_base64` string
  - `media_content_type` string
  - `media_kind` 'video' | 'audio' | 'image'
  - `video_base64` string
  - `video_content_type` string
  - `audio_base64` string
  - `audio_content_type` string
  - `data_url` string
  - `filename` string
  - `process_async` boolean: When true, leave the job queued for POST /v1/qc/jobs/drain instead of running QC in the create request. Inline media and inline sidecars are not supported in queued mode.
  - `duration_seconds` number: Declared media duration used for cost, usage, and abuse-limit preflight.
  - `profile` 'auto' | 'nto_long_form' | 'generic_creator_video' | 'shorts' | 'audio' | 'npo_podcast_or_audio' | 'thumbnail': Optional QC profile. Use auto to infer from media kind/duration, or pass nto_long_form, generic_creator_video, shorts, audio, npo_podcast_or_audio, or thumbnail. Explicit checks override profile defaults.
  - `size_bytes` integer: Declared media size used for upload abuse-limit preflight.
  - `manifest_json` union: Optional storybook/edit manifest JSON used by repeat_fatigue for visual reuse and source-family analysis.
    - object
    - string
  - `manifest_base64` string: Optional base64-encoded storybook/edit manifest JSON.
  - `manifest_filename` string
  - `manifest_url` string: HTTPS URL for a remote storybook/edit manifest. Use for process_async jobs because inline sidecars are ephemeral.
  - `transcript_text` string: Optional transcript/script text used by spoken_leaks without ASR spend.
  - `transcript_json` union: Optional transcript JSON with text or words fields used by spoken_leaks.
    - object
    - string
  - `transcript_base64` string: Optional base64-encoded transcript text or JSON.
  - `transcript_filename` string
  - `transcript_url` string: HTTPS URL for a remote transcript text or JSON sidecar. Use for process_async jobs because inline sidecars are ephemeral.
  - `watchlist_json` union: Optional pronunciation/term watchlist JSON for pronunciation_watchlist.
    - object
    - string
  - `watchlist_base64` string: Optional base64-encoded pronunciation/term watchlist JSON.
  - `watchlist_filename` string
  - `watchlist_url` string: HTTPS URL for a remote pronunciation/term watchlist JSON sidecar. Use for process_async jobs because inline sidecars are ephemeral.
  - `expected_script_text` string: Optional locked script text used by script_faithfulness with transcript_text/transcript_json.
  - `expected_script_json` union: Optional locked script JSON with text, script, or words fields used by script_faithfulness.
    - object
    - string
  - `expected_script_base64` string: Optional base64-encoded locked script text or JSON.
  - `expected_script_filename` string
  - `expected_script_url` string: HTTPS URL for a remote locked-script text or JSON sidecar. Use for process_async jobs because inline sidecars are ephemeral.
  - `chunk_sidecars_json` union: Optional array or object map of chunk QC sidecar JSON files used by chunk_sidecar_failures, for example packaged *.garble-report.json entries.
    - object
    - string
  - `chunk_sidecars_base64` string: Optional base64-encoded JSON array or object map of chunk QC sidecar files.
  - `chunk_sidecar_dirname` string
  - `chunk_sidecars_url` string: HTTPS URL for a remote JSON array or object map of chunk QC sidecars. Use for process_async jobs because inline sidecars are ephemeral.
  - `plan_id` string: Optional plan preset for cost estimates and margin guardrails: creator, studio, network, or stress_99_5000.
  - `plan_price_cents` integer: Optional custom monthly plan price in cents for cost guardrail calculations.
  - `included_minutes` integer: Optional included monthly checked minutes for cost guardrail calculations.
  - `ai_review_seconds` number: Internal or explicitly authorized model-review seconds for cost guardrails. Public included minutes are quality QC minutes.
  - `cost_guardrail` 'downgrade' | 'block' | 'off': Margin guardrail behavior when requested AI review would break the >95% gross-margin target.
  - `checks` string

## Response `200`

Existing idempotent job returned

## Other responses

- `202`: Job queued
- `401`: Missing or invalid API key
- `403`: Insufficient scope
- `413`: Duration or upload-size abuse limit exceeded
- `429`: Active job concurrency limit exceeded

---

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