> ## Documentation Index
> Fetch the complete documentation index at: https://docs.closient.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Manage Product Certifications

> Add, update, list, and remove the certifications a product holds (USDA Organic, Fair Trade and the like) with each certificate's number, issuer, dates and verification link -- the programmatic equivalent of the dashboard's certifications page.

Programmatic equivalent of the dashboard's `products/<gtin>/certifications/` page.

## When to use

* A brand owner wants the certifications a product holds on its Closient record, with the
  details of each certificate, so a shopper or a search filter can rely on them.
* A certificate on file has been renewed, has lapsed, or carries a wrong number or link.

## Auth

`X-API-Key` header or OAuth token. The caller must be a member of the product's
organization with the contribute role (Editor or Manager). A read-only key is refused with
`403`; a product another organization owns answers `404`, so the API never confirms it
exists.

## Flow

```
GET    /certifications/api/v1/certifications?label={name}
GET    /certifications/api/v1/products/{gtin}/certifications
POST   /certifications/api/v1/products/{gtin}/certifications
PATCH  /certifications/api/v1/products/{gtin}/certifications/{certification_id}
DELETE /certifications/api/v1/products/{gtin}/certifications/{certification_id}
```

* **Find the certification** -- a certification is chosen from Closient's catalog by its
  `id`. Search the catalog by `label` or exact `code` (e.g. `USDA_ORGANIC`). If it is not in
  the catalog, report it rather than picking a near match.
* **List** -- every certification on the product.
* **Create** -- the body names the catalog entry with `certification_id` and may carry the
  certificate's `certificate_number`, `issuing_body`, `valid_from`, `expiration_date`,
  `verification_url`, `scope`, `certification_value`, `audit_date`,
  `initial_certification_date` and `certificate_countries`; fields are listed in the OpenAPI
  document at `/certifications/api/v1/openapi.json`. `verification_url` must be an http(s)
  address of at most 200 characters. A product can hold each certification once; a second
  create answers `409`.
* **Update** -- `PATCH` only the fields to change, addressed by the certification's `id`
  (not an assignment id). Send `null` to clear a date.
* **Delete** -- removes the certification from the product permanently.
* **Read back** -- every write returns the saved assignment; list again to confirm.

Returns `403` for a read-only key, `404` for a product or assignment the caller cannot see,
`409` for a duplicate, and `422` for an invalid value.

## Notes

Record a certification only when the brand publishes it for this product or holds the
certificate. A brand's agent leaves `verification_status` alone: whether a certificate has
been checked against the issuing body's registry is Closient's to record.

The fields a brand writes on a certification are defined once on the model
(`CertificationAssignment.BRAND_EDITABLE_FIELDS`); both API schemas are pinned to that set.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.