/api/v1/products/{id}Update a product
Patch one or more product fields. Send only the keys you want to change — omitted fields stay untouched. The whole-array semantics on `imageUrls` are intentional: your CMS is the canonical image set, so a PATCH with `imageUrls: ["a","b"]` replaces whatever was there. To append a single image without rewriting the list, use the multipart upload endpoint instead.
Counts as one v1 write. Honours `Idempotency-Key`. `model` uniqueness is re-checked when changed; `description: null` clears the description (distinct from omitting the key).
Path parameters
- idrequired
ObjectId
Product ID.
e.g. 6650a1b2c3d4e5f6a7b8c9d0
Headers
- Authorizationrequired
string
`Bearer <api-key>`.
- Idempotency-Key
string
UUID v4.
Body fields
- name
string (1-200)
Display name.
- model
string (1-100)
Model identifier. Uniqueness re-checked when changed.
- description
string | null (≤ 2000)
Pass `null` to clear.
- defaultFieldValues
object
Replaces seed values for future passports.
- imageUrls
string[] (max 20)
Replaces the full image array.
- status
enum
`active` or `archived`.
- sourceLocale
string (ISO 639-1)
Update the locale of `name` / `description`.
Request
curl -sS -X PATCH \
https://app.tracepass.eu/api/v1/products/6650a1b2c3d4e5f6a7b8c9d0 \
-H "Authorization: Bearer tp_REDACTED_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Li-Ion 48V Battery Pack (revised)",
"imageUrls": ["https://cdn.example.com/new-hero.jpg"]
}'Response
{
"_id": "6650a1b2c3d4e5f6a7b8c9d0",
"name": "Li-Ion 48V Battery Pack (revised)",
"imageUrls": ["https://cdn.example.com/new-hero.jpg"],
"updatedAt": "2026-05-09T15:30:00.000Z"
}