---
title: "Build or rebuild the product kit"
description: "Builds or rebuilds the product kit: cutouts from the raw photos, the generated angle set (`full: true` = 8, or an explicit `angles` list), the fidelity check and the structured facts. Asynchronous — returns a queued job whose result publishes onto the product. Requires an Idempotency-Key. The first 5 kits per workspace are included; the reservation is still made and refunded on settlement. An empty body asks for the free reference sheet and answers 202 `{ status: queued, kind: reference_sheet }`. Quote first: send `quote_only: true` to get a `quote_id` and the credits (200, no charge, valid for 10 minutes), then send the same body with that `quote_id` and the same Idempotency-Key. The confirm charges exactly the quoted credits. A confirm whose input, price or kit version differs from the quote is refused, and a retried confirm returns the first answer and is never charged twice. With `quote_only` or `quote_id` and neither `full` nor `angles`, the call builds the 4 core angles. A body with no quote field still builds in one step."
url: https://docs.roasos.com/api-reference/products/buildProductKit
---

# Build or rebuild the product kit

Builds or rebuilds the product kit: cutouts from the raw photos, the generated angle set (`full: true` = 8, or an explicit `angles` list), the fidelity check and the structured facts. Asynchronous — returns a queued job whose result publishes onto the product. Requires an Idempotency-Key. The first 5 kits per workspace are included; the reservation is still made and refunded on settlement. An empty body asks for the free reference sheet and answers 202 `{ status: queued, kind: reference_sheet }`. Quote first: send `quote_only: true` to get a `quote_id` and the credits (200, no charge, valid for 10 minutes), then send the same body with that `quote_id` and the same Idempotency-Key. The confirm charges exactly the quoted credits. A confirm whose input, price or kit version differs from the quote is refused, and a retried confirm returns the first answer and is never charged twice. With `quote_only` or `quote_id` and neither `full` nor `angles`, the call builds the 4 core angles. A body with no quote field still builds in one step.

## `POST /v1/products/{id}/kit`

Endpoint: `POST https://api.roasos.com/v1/products/{id}/kit`

Build or rebuild the product kit

Builds or rebuilds the product kit: cutouts from the raw photos, the generated angle set (`full: true` = 8, or an explicit `angles` list), the fidelity check and the structured facts. Asynchronous — returns a queued job whose result publishes onto the product. Requires an Idempotency-Key. The first 5 kits per workspace are included; the reservation is still made and refunded on settlement. An empty body asks for the free reference sheet and answers 202 `{ status: queued, kind: reference_sheet }`. Quote first: send `quote_only: true` to get a `quote_id` and the credits (200, no charge, valid for 10 minutes), then send the same body with that `quote_id` and the same Idempotency-Key. The confirm charges exactly the quoted credits. A confirm whose input, price or kit version differs from the quote is refused, and a retried confirm returns the first answer and is never charged twice. With `quote_only` or `quote_id` and neither `full` nor `angles`, the call builds the 4 core angles. A body with no quote field still builds in one step.

### Parameters

- `id` (path) — required
- `undefined`

### Request body

Content type: `application/json`

### Responses

- `200`: quote_only: the quote. Confirm it with quote_id.
- `202`: Kit job queued. Poll the product until its kit status is ready.
- `400`: Invalid request body, unknown angle, quote_only together with quote_id, or a missing or malformed Idempotency-Key
- `402`: Insufficient credits
- `403`: The API key request credit ceiling denied the kit job
- `404`: Product not found in this workspace
- `409`: kit_job_running, the product has no photos to build from, a quote that was already confirmed, or the idempotency key was reused with different request data
- `410`: The quote expired. Quote again.
- `503`: The kit job could not be claimed safely

Read the full reference at https://docs.roasos.com/api-reference/products/buildProductKit.
