Skip to main content
Version: 3.0.0

Migrating from 2.x to 3.0.0

This guide covers what changed between 2.x and 3.0.0, what you need to do before upgrading, and what you can adopt at your own pace after the upgrade.

Before you upgrade

3.0.0 introduces strict validation of linkType values against namespace-specific vocabularies. Any registration request that uses an unrecognised link type will be rejected with a 404 error.

Before upgrading, review your registration scripts and payloads to ensure every linkType value uses a supported prefix and a key that exists within that vocabulary. See Link type validation below for the full list.

2. Review registration scripts that use itemDescription

The field itemDescription has been renamed to description. Both names are accepted in 3.0.0, but itemDescription is deprecated and will be removed in a future release. Now is a good time to update any scripts or tooling that still use itemDescription.

Breaking changes

Link types are now validated against a registered vocabulary for the prefix:key format. Previously, any string was accepted for linkType.

What changed:

  • linkType must follow the prefix:key format (e.g. gs1:pip, untp:dpp).
  • The prefix must be one of the supported vocabularies (gs1 or untp).
  • The key after the colon must exist in that vocabulary.
  • Invalid link types return a 404 error with a linkType field error.

Before (2.x — accepted without validation):

{
"linkType": "myCustomType"
}
{
"linkType": "gs1:unknownType"
}

After (3.0.0 — both examples above return 404):

{
"linkType": "gs1:pip"
}
{
"linkType": "untp:dpp"
}

Supported vocabularies

gs1 prefix — GS1 link type vocabulary:

KeyTitle
activityIdeasActivity Ideas
allergenInfoAllergen information
appDownloadApp download
backgroundInfoBackground Information
brandHomepageClinicalInformation for professionals about this brand
brandHomepagePatientInformation for patients about this brand
careersInfoCareers information
certificationInfoCertification Information
consumerHandlingStorageInfoConsumer handling and storage information
defaultLinkDefault link
defaultLinkMultiDefault linkMulti
eifuElectronic Instructions For Use
epcisEPC Information Services (EPCIS) repository
epilElectronic Patient Information Leaflet
eventsInfoEvents information
faqsFrequently Asked Questions
handledByHandled by
hasRetailersHas Retailers
homepageOrganisation Information Page
ingredientsInfoIngredients information
instructionsInstructions
jwsJSON Web Signature
leaveReviewLeave a review
locationInfoLocation information
logisticsInfoLogistics information
loyaltyProgramLoyalty program
masterDataMaster data
menuInfoMenu information
nutritionalInfoNutritional Information
openingHoursInfoOpening hours information
paymentLinkMake Payment
pipProduct Information Page
productSustainabilityInfoSustainability and recycling (deprecated)
promotionPromotion
purchaseSuppliesOrAccessoriesPurchase supplies or accessories
quickStartGuideQuick start guide
recallStatusRecall status
recipeInfoRecipe website
registerProductRegister purchase
registryEntryEntry in a register
relatedImageRelated image
relatedVideoRelated video
reviewReviews
safetyInfoSafety information
scheduleTimeScheduling/Reservation
serviceInfoService information
smartLabelSmartLabel
smpcSummary Product Characteristics (SmPC)
socialMediaSocial media
statisticInfoStatistics
subscribeSubscribe
supportSupport
sustainabilityInfoSustainability and recycling
traceabilityTraceability information
tutorialTutorial
userAgreementSign waiver/agreement/document
verificationServiceVerification Service
whatsInTheBoxWhat's in the box?

untp prefix — UN Transparency Protocol vocabulary:

KeyTitle
dppDigital Product Passport
dccDigital Conformity Credential
dteDigital Traceability Event
idrIdentity Resolver
dfrDigital Facility Record
diaDigital Identity Anchor
cvcConformity Vocabulary Catalog

Error response

When a linkType fails validation, the API returns:

HTTP/1.1 404 Not Found
{
"errors": [
{
"field": "linkType",
"message": "..."
}
]
}

There are two distinct error cases:

  • Unknown prefix — the prefix before : is not gs1 or untp.
  • Unknown key — the prefix is recognised but the key does not exist in its vocabulary.

New features

These features are all opt-in. Existing workflows continue to work without changes.

description field replaces itemDescription

The registration request field itemDescription has been renamed to description.

Both fields are accepted in 3.0.0. When both are present, description takes precedence. The itemDescription field is deprecated and will be removed in a future version.

Before (still works in 3.0.0, but deprecated):

{
"namespace": "example-identifier-scheme",
"identificationKeyType": "gtin",
"identificationKey": "12345678901234",
"itemDescription": "Organic green tea 250 g",
"qualifierPath": "/",
"active": true,
"responses": []
}

After (preferred):

{
"namespace": "example-identifier-scheme",
"identificationKeyType": "gtin",
"identificationKey": "12345678901234",
"description": "Organic green tea 250 g",
"qualifierPath": "/",
"active": true,
"responses": []
}

The value is stored and returned as description in the linkset context object regardless of which input field was used.

Application identifier ai field is now optional

When registering a namespace, the ai field on each ApplicationIdentifier object is now optional. If omitted, the resolver defaults it to the value of shortcode.

This simplifies identifier registration for non-GS1 schemes where GS1 application identifier numbers are not applicable.

Before (2.x — ai was required):

{
"applicationIdentifiers": [
{
"title": "Product Serial Number",
"label": "Serial",
"shortcode": "serial",
"ai": "serial",
"type": "I",
"regex": "[A-Za-z0-9]{1,20}"
}
]
}

After (3.0.0 — ai can be omitted; defaults to shortcode):

{
"applicationIdentifiers": [
{
"title": "Product Serial Number",
"label": "Serial",
"shortcode": "serial",
"type": "I",
"regex": "[A-Za-z0-9]{1,20}"
}
]
}

For GS1 schemes, continue to provide ai explicitly (e.g. "ai": "01" for GTIN).

Checklist

Required before upgrade

  • Audit all linkType values in existing registration scripts and payloads — any unrecognised prefix or key will be rejected after upgrade
  • Pull the 3.0.0 container image
  • Replace itemDescription with description in registration scripts and tooling
  • Remove explicit ai fields from non-GS1 application identifier definitions where ai equals shortcode
  • Monitor logs — improved error logging in the MinIO provider and global exception filter surfaces storage errors that were previously silent