---
title: "Approve Tech Pack"
method: POST
path: "/questionnaires/jobs/{job_id}/approve"
tags: ["questionnaires"]
---

# Approve Tech Pack

`POST /questionnaires/jobs/{job_id}/approve`

## Request

- Base URL: `https://api.threadchain.pro` (the document declares no server; this is the origin it was published from)
- URL: `https://api.threadchain.pro/questionnaires/jobs/{job_id}/approve`
- Auth: OAuth 2
  - Password
  - Token URL: `auth/token`

Accept reviewed renders.

**Clothes (2D-first):** moves to ``awaiting_3d_start`` so the designer can complete Visual Studio
on the tech pack review page, then call ``POST /jobs/{job_id}/start-clothes-3d-generation`` to
queue 3D-from-2D — unless both production-match yes/no questions are Yes, in which case style
placement is analysed, saved, and colourway 1 3D is queued automatically (``processing``).

Construction KV merge and POM/BOM prefills run only after the user accepts 3D
(see ``POST /jobs/{job_id}/approve-3d-renders``).

**Jewelry:** marks the job **completed** (pack is produced in ``process_job``; no second finalize from approve).

## Path parameters

- `job_id` string, uuid, required

## Request body

- Approve2DRenderRequest: Select the active outer 2D pair before approving 2D review.
  - `front_2d_url` string, required
  - `back_2d_url` string, required
  - `front_3d_url` string, nullable
  - `back_3d_url` string, nullable
  - `start_3d_generation` boolean

## Response `200`

Successful Response

- GetJobStatusResponse
  - `job_id` string, uuid, required
  - `session_id` string, uuid, required
  - `status` 'queued' | 'processing' | 'awaiting_size_studio' | 'awaiting_review' | 'awaiting_3d_start' | 'awaiting_3d_review' | 'awaiting_construction' | 'workspace_active' | 'completed' | 'failed', required
  - `progress` integer, required
  - `brand_id` string, uuid, nullable
  - `manufacturer_ids` string[]
  - `brand` TechPackBrandSummary: Compact brand reference returned alongside a tech pack.
    - `id` string, uuid, required
    - `name` string, required
    - `manufacturer_id` string, uuid, nullable
    - `contact_email` string, nullable: Brand org owner's email; surfaced for manufacturer-side dashboards.
  - `manufacturers` TechPackManufacturerSummary[]
    - `id` string, uuid, required
    - `company_name` string, nullable
    - `factory_name` string, nullable
  - `result_url` string, nullable
  - `preview_url` string, nullable
  - `front_3d_url` string, nullable
  - `back_3d_url` string, nullable
  - `left_3d_url` string, nullable
  - `right_3d_url` string, nullable
  - `front_2d_url` string, nullable
  - `back_2d_url` string, nullable
  - `left_2d_url` string, nullable
  - `right_2d_url` string, nullable
  - `inner_front_2d_url` string, nullable
  - `inner_back_2d_url` string, nullable
  - `pom_overlay_outer_front_url` string, nullable
  - `pom_overlay_outer_back_url` string, nullable
  - `pom_overlay_inner_front_url` string, nullable
  - `pom_overlay_inner_back_url` string, nullable
  - `bom_callout_giq_outer_front_url` string, nullable
  - `bom_callout_giq_outer_back_url` string, nullable
  - `bom_callout_giq_inner_front_url` string, nullable
  - `bom_callout_giq_inner_back_url` string, nullable
  - `bom_callout_nogiq_outer_front_url` string, nullable
  - `bom_callout_nogiq_outer_back_url` string, nullable
  - `bom_callout_nogiq_inner_front_url` string, nullable
  - `bom_callout_nogiq_inner_back_url` string, nullable
  - `refinement_count_front` integer
  - `refinement_count_back` integer
  - `refinement_count_left` integer
  - `refinement_count_right` integer
  - `refinement_count_2d_front` integer
  - `refinement_count_2d_back` integer
  - `refinement_count_2d_left` integer
  - `refinement_count_2d_right` integer
  - `share_code` string, nullable
  - `public_share_view_count` integer
  - `last_public_share_view_at` string, date-time, nullable
  - `error_message` string, nullable
  - `released_at` string, date-time, nullable
  - `created_at` string, date-time, required
  - `started_at` string, date-time, nullable
  - `completed_at` string, date-time, nullable
  - `manufacturer_completed_at` string, date-time, nullable
  - `download_url` string, nullable
  - `refinement_payload` object, nullable
  - `flat2d_regenerate_count` integer
  - `flat2d_regenerate_payload` object, nullable
  - `techpack_import_status` string, nullable
  - `techpack_import_step` string, nullable
  - `generation_step` string, nullable
  - `techpack_import_incomplete` boolean, nullable
  - `techpack_import_unresolved_required` integer, nullable
  - `techpack_import_draft_acknowledged` boolean, nullable
  - `entitlements` object, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/threadchain/apis/threadchain-backend.md) - [All operations](https://skmtc.dev/threadchain/apis/threadchain-backend/llms.txt) - [OpenAPI document](https://skmtc.dev/threadchain/apis/threadchain-backend/revisions/8ee288a7e6bd?raw)
