Every endpoint that takes a `ref` accepts any of these. Resolution happens server-side so the same code path works whether you hold a barcode or a URL you copied from a browser.
| Kind | Example | Notes |
|---|---|---|
| GTIN-14 | 00885909950805 | Canonical form. Check digit verified. |
| UPC-A | 885909950805 | Zero-padded to GTIN-14. |
| EAN-13 | 5054197276187 | Zero-padded to GTIN-14. |
| ISBN-13 | 9780262035613 | Books and ebooks; also a GTIN. |
| ASIN | B09XS7JWHH | Marketplace-internal. Does not travel between sellers. |
| Seller SKU | walmart:21284588 | Namespaced by seller. |
| Product URL | https://…/ip/21284588 | Parsed to a seller and SKU. |
| Free text | sony wh-1000xm5 | Falls back to search; returns a confidence. |
An identifier that fails its own checksum is rejected rather than stored. It looks authoritative, which makes it more dangerous than an empty field — a transcription error that enters a catalogue silently corrupts every join downstream.
Whole categories, apparel above all, carry no reliable identifier. Matching then runs on brand, normalised title and attributes, and always returns `match.confidence`. Below the trust threshold the result is flagged `review: true` rather than silently accepted.