---
title: "Patch Tech Pack Platform State"
method: PATCH
path: "/questionnaires/jobs/{job_id}/platform-state"
tags: ["questionnaires"]
---

# Patch Tech Pack Platform State

`PATCH /questionnaires/jobs/{job_id}/platform-state`

## 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}/platform-state`
- Auth: OAuth 2
  - Password
  - Token URL: `auth/token`

Merge partial tech pack platform fields into `tech_pack_jobs.platform_payload`.

Visual Studio (non-questionnaire) inputs: PATCH a nested object, e.g.
`{"visualStudio": {"mainFabric": "...", "colourText": "…", "colourImageUrl": "https://…",
"artworkImageUrl": "https://…", "patternImageUrl": "https://…",
"artworkPlacementSides": "front"|"back"|"both", "artworkPlacementNotes": "…"}}`.
`colourRefUrl` / `printImageUrl` / `customPrintUrl` are accepted as legacy aliases.
Partial keys merge with any previously saved `visualStudio` blob.

`rebuild=false` skips the post-save full state rebuild for callers that
discard the response body, returning only `job_id`/`saved`/`job_status`.
Garment row `dye` colours may be sent as plain Pantone code strings or as the
enriched `{"pantone","hex","rgb","name"}` objects this endpoint's GET returns.

## Path parameters

- `job_id` string, uuid, required

## Query parameters

- `rebuild` boolean

## Request body

- object

## Response `200`

Successful Response

- TechPackPlatformStateResponse: Prefill from questionnaire + saved overrides for the in-app tech pack editor.
  - `job_id` string, uuid, required
  - `prefill` object, nullable
  - `saved` object, required
  - `merged` object, nullable
  - `job_status` string, nullable
  - `job_renders` TechPackJobRendersPayload: Latest render assets from `tech_pack_jobs` (read-only for the editor UI).
    - `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
    - `callout_pom_front` string, nullable
    - `callout_pom_back` 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
    - `preview_url` string, nullable
  - `share_code` string, 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)
