products/<gtin>/serials/ page.
When to use
- A brand owner wants individual units (GS1 AI 21) of a product on record, optionally tied to the lot they came from.
- A serial’s dates or lot need correcting.
- A serial was registered by mistake and needs removing.
Auth
X-API-Key header or OAuth token. The caller must be a member of the product’s
organization with the contribute role (Owner, Manager or Editor). A read-only key is
refused with 403; a product or serial another organization owns answers 404, so the
API never confirms it exists.
Flow
- List — every serial on the product, paginated.
- Create — the body carries
serial(1 to 20 printable ASCII characters, no spaces) and optionallylot_id(a lot of this same product),production_date,expiration_dateandbest_before_date; fields are listed in the OpenAPI document at/products/api/v1/openapi.json. - Update —
PATCHonly the fields to change;lot_id: nulldetaches the unit from its lot. - Delete — removes one serial permanently.
- Register observed — records a serial a scan was seen carrying; repeating it is harmless.
- Read back — every write returns the saved serial; list again to confirm.
Errors
403 for a read-only key, or when the free plan’s serial allowance is used up (the body
carries an upgrade_url); 404 for a product, serial or lot_id the caller cannot see;
409 for a serial the product already has; 422 for an invalid value or an empty update.
Notes
The fields a brand writes on a serial are defined once on the model (ProductSerial.BRAND_EDITABLE_FIELDS); the dashboard form and the API schemas are pinned
to that set (the model’s lot is lot_id on the wire).