msr-2.1-draft.json only, not ratifiedMany products can only be bought or used in some countries. Licensing, export control, payment providers, tax registration and data-protection law all draw geographic lines. A registry that cannot read those lines lists a product to people who cannot buy it, and an AI agent recommends software a user is not allowed to use.
MSR JSON 2.0 carries one geographic value, entity.vendor.country_code. It says where the
vendor is based, not where the product is offered. It carries no statement of interface or support languages,
none of the currencies a customer can pay in, and none of where customer data is stored. The keys of entity.descriptions look like language
tags, but nothing validates them.
RFC 0006 adds an optional capabilities.availability object:
"availability": {
"regions": ["019", "150"],
"countries": ["AO", "MZ"],
"excluded_countries": ["CU"],
"languages": ["pt-BR", "en", "es-419"],
"support_languages": ["pt-BR", "en"],
"currencies": ["BRL", "EUR", "USD"],
"data_residency": ["BR", "EU"]
}
| Field | Meaning | Code system |
|---|---|---|
regions | Regions where the product is offered | UN M49 region codes, as used by BCP 47 and Unicode CLDR |
countries | Countries where the product is offered, in addition to the regions | ISO 3166-1 alpha-2 |
excluded_countries | Countries where the product is not offered, even though a listed region contains them | ISO 3166-1 alpha-2 |
languages | Languages of the user interface and documentation | BCP 47 (language, optional script, optional region) |
support_languages | Languages customer support is provided in | BCP 47 |
currencies | Currencies the product can be billed in | ISO 4217 alphabetic, the same form as pricing.currency |
data_residency | Where customer data is stored and processed at rest | ISO 3166-1 alpha-2 or UN M49 region |
Every field is optional, and at least one must be present when the object is present. Every list is non-empty and holds no duplicates. Unknown keys are rejected.
The accepted region codes are 001 (World), the continents 002 Africa,
019 Americas, 142 Asia, 150 Europe and 009 Oceania,
and their CLDR sub-regions (for example 419 Latin America and the Caribbean,
005 South America, 003 North America). A three-digit M49 country
code is not a region and is rejected; countries use ISO 3166-1. The exceptionally reserved code
EU is accepted for the European Union. Europe (150) is not the same legal
perimeter as the EU.
languages and support_languages are independent: a product with an interface
in ten languages may answer support tickets in two. currencies lists every currency a
customer can be billed in; pricing.currency stays the currency of the advertised price.
The same draft also constrains the keys of entity.descriptions to BCP 47 language tags.
regions or countries as available everywhere. A publisher that
means worldwide declares "regions": ["001"].regions
and those in countries, minus excluded_countries. Exclusion wins over
inclusion.data_residency is not a compliance certification.
MSR JSON 2.0 closes capabilities with additionalProperties: false. Adding the
object to 2.0 would make a 2.0 validator reject manifests that use it. The change therefore lives in the
v2.1 draft schema only. No 2.0 manifest changes meaning, and no 2.0 validator changes behavior.
data_residency claim can mislead buyers with legal obligations. Registries
SHOULD show it as a publisher claim, and SHOULD show whether the manifest is signed (RFC 0003).