DOCS

Product identifiers

Identify a product's manufacturer product ID and GTINs, or check whether the identifiers you have actually belong to it.

Coming soon: The product identifiers API is not yet available. The operations, fields, and examples on this page describe the API as it will launch.

Why product identifiers matter 

Customs authorities, marketplaces, and carriers increasingly ask for identifiers that pin down exactly which product is in a shipment. From 1 November 2026, EU customs declarations for e-commerce imports must carry three of them for every product:

EU product identifier↕What it is↕Field↕
Merchant product identifier (M-PID)Your own reference for the product, such as the ID on your product page.productId, which you send and get back unchanged.
Non-standardised manufacturer product identifier (NS-PID)The manufacturer's own reference, such as a part, model, or style number.manufacturerProductId
Standardised manufacturer product identifier (S-PID)An internationally standardised code, such as a UPC, EAN, or ISBN barcode number.A value from globalTradeItemNumbers

Your own reference is easy to supply. The other two often aren't. Catalogs are full of missing manufacturer product IDs, seller SKUs entered in their place, placeholders such as "N/A," and barcodes copied from a different size or color.

Zonos product identifiers helps in two ways:

  • Infer. You send product details. Zonos returns the product's manufacturer product ID and the GTINs it knows for it, or tells you why it can't.
  • Validate. You send product details with a manufacturer product ID, a GTIN, or both. Zonos tells you how likely each one is to belong to that product, and suggests likelier products when it doesn't.

Note: An empty globalTradeItemNumbers list means Zonos doesn't know a GTIN for the product, not that none exists. Check the product or its packaging before declaring that it has no barcode.

How it works 

You submit the product details you have. Zonos identifies the product and returns:

  • A status (for inference) or a verdict for each identifier you sent (for validation) that tells you which case applies.
  • The identified product: its manufacturer product ID, what kind of ID it is, its GTINs, and its canonical brand.
  • A probability between 0.0 and 1.0 on every result, so you can set your own thresholds for automation and review.

Statuses and verdicts are advisory: you decide what each one means for your workflow.

Field↕Required↕Notes↕
nameYesProduct name or listing title.
brandNoThe brand the product is sold under. Strongly recommended.
categoriesNoCategory hierarchy, most general first. Recommended.
descriptionNoFull description, including any item specifics.
globalTradeItemNumberNoUPC, EAN, JAN, or ISBN, of any length. Considerably improves inference. For validation, the GTIN to check.
productIdNoYour identifier. Echoed back so you can match results to requests.
manufacturerProductIdValidation onlyThe part number or composite product ID to check.

For every type, field, and enum value, see the Product identifiers schema.

Note: Zonos product identifiers will be available via API only. Each request accepts up to 25 products. Results come back in the same order as the input, and each result echoes the input fields you sent (name, brand, description, and so on), so you can store it without joining it back to your request.

Identifier types 

Every identified product has one manufacturerProductId, and manufacturerProductIdType tells you what kind of ID it is:

manufacturerProductIdType↕What it is↕Example↕
MANUFACTURERThe manufacturer's own part or model number.MK2K3LL/A
COMPOSITEThe product has no part number, so the ID is built from the attributes that define it. See Composite product IDs.tc:pkm:sv3pt5:199:en
GLOBAL_TRADE_ITEM_NUMBERThe product has no other ID, so its GTIN is used. Only returned when you have enabled using GTINs as manufacturer product IDs for your account.195925223587

All three can be declared as the non-standardised manufacturer product identifier (NS-PID). manufacturerProductId is null only when a product is known by its GTINs alone and you haven't enabled the GTIN fallback.

GTINs are returned as issued: 8, 12, 13, or 14 digits, most common first. A product can have several, for example a UPC for North America and an EAN for Europe.

Composite product IDs 

Some products have no manufacturer part number. A trading card, a coin, or a comic book issue is identified by its attributes instead. For these products, Zonos returns a composite product ID: a short, readable ID built from the attributes that define the product. The same product always gets the same ID, so you can use it as a catalog key and compare it across sellers.

A composite product ID is a family prefix followed by fixed segments, separated by colons:

Product family↕Prefix↕Segments↕Example↕
Trading cardtcgame, set, card number, language, and finish if not standardtc:pkm:sv3pt5:199:en
Coincnissuing country, denomination, year, mint mark, varietycn:us:0.01usd:1909:s:vdb
Banknotebnissuing country, denomination, series, varietybn:us:100usd:2017a
Comic bookcmpublisher, series and start year, issue, printing, covercm:dc:batman-2016:50:2:b
Book without ISBNbkauthor, title, year, editionbk:tolkien:hobbit:1937:1

IDs are lowercase and case is ignored on input. Optional trailing segments are left out when they have their default value. Condition and grading, such as near mint or PSA 10, are not part of the ID: two copies of the same card in different condition share one composite product ID.

Inference statuses 

Every inference returns exactly one status. Branch on status, not on whether product is null.

Status↕What it means↕Recommended action↕
MATCHEDOne product was identified with confidence. It is returned in product.Use the identifiers. Route results with a low confidenceScore to review.
NO_MATCHThe details describe a specific product, but its identifiers couldn't be determined with confidence.Review alternates, add more product details, or ask the manufacturer.
INSUFFICIENT_INFORMATIONThe details are too generic to identify a specific product, for example an unbranded listing with no model or size.Add the brand, a GTIN, or more specific details, then try again.

Note: NO_MATCH is not a finding that the product has no manufacturer product ID. It means Zonos couldn't confidently identify it. If you receive a status your integration doesn't recognize, treat it as NO_MATCH.

Confidence scores 

Every inference includes a confidenceScore between 0.0 and 1.0. It is the probability that the status is correct and, when a product is returned, that it is the right one. Scores are calibrated, so you can read them literally: among results with a confidenceScore of 0.9, about 9 in 10 are correct.

When other products came close, they are returned in alternates, most likely first, each with a probabilityMass: the probability that it is the product. Alternates are often the same product in another size, color, or regional version. Use them to speed up manual review, but never treat an alternate as the answer.

You can set thresholds that fit your risk tolerance. For example, accept MATCHED results at 0.85 or above automatically and send the rest to review.

Infer product identifiers 

Use the manufacturerProductIdsInfer mutation with your product details. Only name is required, but the brand, the category, and a GTIN significantly improve results.

The example below sends three products in one request: an iPad, a Samsung smartwatch, and a Nikon camera lens.

1mutation ManufacturerProductIdsInfer(
2$input: [ManufacturerProductIdInferInput!]!
3) {
4 manufacturerProductIdsInfer(input: $input) {
5 alternates {
6 probabilityMass
7 product {
8 brand
9 globalTradeItemNumbers
10 manufacturerProductId
11 manufacturerProductIdType
12 }
13 }
14 confidenceScore
15 id
16 name
17 product {
18 brand
19 globalTradeItemNumbers
20 manufacturerProductId
21 manufacturerProductIdType
22 }
23 productId
24 status
25 }
26}

In the example above:

  • The iPad is MATCHED to MK2K3LL/A, Apple's part number for the 64 GB Wi-Fi model in Space Gray. No other product came close, so alternates is empty. globalTradeItemNumbers is empty because Zonos doesn't know a GTIN for this part number, not because it has none.
  • The Galaxy Watch5 is MATCHED, but with a confidenceScore of only 0.66. The listing describes the 44 mm Bluetooth Graphite watch, which Samsung sells under a different part number in each region. The alternates are the base model SM-R910 and the US version SM-R910NZAAXAA, with its UPC. A result like this is a good candidate for review: if you sell in the US, SM-R910NZAAXAA is probably the one you want.
  • The Nikon lens is NO_MATCH. The lens is clearly identified, but the listing doesn't say which version it is, and the alternates (2199 and 2214, each with its own UPC) received little probability. The confidenceScore of 0.93 is the probability that NO_MATCH is the right answer, not that a lens was found. Add the version or the UPC from the box, then try again.

Validate product identifiers 

A manufacturer product ID or GTIN can be real and still belong to a different product. Use the manufacturerProductIdsValidate mutation to check the identifiers you have. Send a manufacturerProductId, a globalTradeItemNumber, or both. Each one is checked independently and gets its own result, in manufacturerProductIdMatch and globalTradeItemNumberMatch, with a verdict and a probability that the identifier belongs to the product.

Verdict↕What it means↕Recommended action↕
DEFINITELY_SAMEThe identifier belongs to the product.Accept.
LIKELY_SAMEThe identifier probably belongs to the product.Accept, or review if your tolerance for error is low.
UNLIKELY_SAMEThe identifier probably belongs to a different product.Review. Check suggestions for a better fit.
DEFINITELY_NOT_SAMEThe identifier belongs to a different product.Reject. Use suggestions, or ask the supplier for the correct identifier.
INDETERMINATENo verdict: the identifier is malformed, a placeholder such as "N/A," or a seller SKU, or the details are too generic.Ask for the identifier printed on the product or its packaging.

Case, spaces, and hyphens are ignored, so MK2K3LL/A, mk2k3ll-a, and MK2K3LLA are checked as the same manufacturer product ID. For a manufacturer product ID, manufacturerProductIdType tells you how the value was read. When an identifier doesn't belong to the product, likelier products are returned in suggestions.

The example below checks three manufacturer product IDs a supplier might give you for the iPad from Infer product identifiers.

1mutation ManufacturerProductIdsValidate(
2$input: [ManufacturerProductIdValidateInput!]!
3) {
4 manufacturerProductIdsValidate(input: $input) {
5 globalTradeItemNumber
6 globalTradeItemNumberMatch {
7 probability
8 verdict
9 }
10 id
11 manufacturerProductId
12 manufacturerProductIdMatch {
13 probability
14 verdict
15 }
16 manufacturerProductIdType
17 name
18 productId
19 suggestions {
20 probabilityMass
21 product {
22 brand
23 globalTradeItemNumbers
24 manufacturerProductId
25 manufacturerProductIdType
26 }
27 }
28 }
29}

In the example above:

  • MK2K3LL/A is DEFINITELY_SAME. It is the part number for the 64 GB Wi-Fi model in Space Gray.
  • MK663LL/A is DEFINITELY_NOT_SAME. It is a real Apple part number, but for the Wi-Fi + Cellular version of the same iPad. The listing says Wi-Fi, so the correct part number is returned in suggestions.
  • N/A is INDETERMINATE. It is a placeholder, not an identifier, so manufacturerProductIdType is null. The product is still identified, so suggestions gives you the part number to use instead.

No GTIN was sent, so globalTradeItemNumberMatch is null. Send one in globalTradeItemNumber and it is checked the same way, independently of the manufacturer product ID.

Catalog item workflows 

Coming soon: Inference and validation will also be available as steps in catalog item workflows, so you can identify products in the same request that validates their categories and classifies them.

Implementation 

Product identifiers is designed to enhance, not replace, your catalog review. A practical setup:

  • Automate the clear cases. Accept MATCHED results above your confidence threshold, along with DEFINITELY_SAME verdicts, and reject DEFINITELY_NOT_SAME.
  • Review the rest. Send NO_MATCH, LIKELY_SAME, UNLIKELY_SAME, and low-confidence results to a reviewer, using alternates or suggestions as a starting point.
  • Go back to the source. For INSUFFICIENT_INFORMATION or INDETERMINATE, ask the supplier for the brand, the part number printed on the product, or its barcode.
  • Keep identifiers with the product. Store manufacturerProductId together with manufacturerProductIdType, so you know later whether you are holding a part number, a composite product ID, or a GTIN.

Start with conservative thresholds, and loosen them as you compare results against your reviewers' decisions.

Was this page helpful?


Get support·Legal docs·© 2026 Zonos