/api/v1/products/{id}/archiveArchive a product
Soft-archive. `Product.status` flips to `archived`; the product disappears from default listings (still visible with the `?showArchived=true` filter). Existing passports keep resolving — archive blocks NEW passport creation against this product going forward, it doesn't break any QR already in customers' hands.
Returns `409 Conflict` when any non-archived passport still references the product — archive every passport first, then re-call this endpoint. Available on every paid plan. Counts as one v1 write. Honours `Idempotency-Key`.
There's no DELETE verb here at the same path: `DELETE /api/v1/products/{id}` is the hard-delete endpoint, with stricter eligibility (zero passports of any status). Archive is the safe-default cleanup verb.
Path parameters
- idrequired
ObjectId
Product ID.
Headers
- Authorizationrequired
string
`Bearer <api-key>`.
- Idempotency-Key
string
UUID v4.
Request
curl -sS -X POST \
https://app.tracepass.eu/api/v1/products/6650b2c3d4e5f6a7b8c9d0e1/archive \
-H "Authorization: Bearer tp_REDACTED_xxxxxxxxxxxx"Response
{
"_id": "6650b2c3d4e5f6a7b8c9d0e1",
"name": "Demo product",
"status": "archived",
"updatedAt": "2026-05-23T17:00:00.000Z"
}