Data validation rules

Metafield definitions support using data validation rules to constrain metafield values. In addition to basic type validation, you can restrict the range or format of metafield values. For example, you can limit single-line text to predefined options, limit decimals to two decimal places, or require URLs to point only to specified domains. This article describes the supported data types, value formats, and configuration methods for each validation rule in the REST Admin API.


How it works​

Metafield validation has two levels:

  1. Basic type validation: Validates whether the data type is supported and whether the metafield value matches the basic format of that data type.

  2. Definition-level validation: After basic type validation succeeds, applies the data validation rules configured in the metafield definition to validate the metafield value.

Data validation rules are configured when creating or updating a metafield definition. When writing a metafield value, the associated metafield definition applies its data validation rules to validate the value. If basic type validation fails, definition-level validation does not run.


Structure​

validations is an array of data validation rule objects. Each rule object must contain nonempty name and value fields.

ParameterTypeDescription
namestringThe name of the data validation rule. Valid values are predefined. Only rule names listed in the Data validation rule overview are supported.
valuestringThe value of the data validation rule.

For example:

[
{"name": "regex", "value": "^[A-Z0-9]+$"},
{"name": "choices", "value": "[\"S\",\"M\",\"L\"]"}
]

General constraints:

  • Each data validation rule name can appear only once in the same metafield definition. Duplicate rules cause metafield definition creation or update to fail.

  • The maximum length of a single value is 300,000 characters.

  • When calling the Update a metafield definition API, an empty validations array indicates that all data validation rules are cleared.


Configure data validation rules​

When creating or updating a metafield definition through the REST Admin API, pass the validations array in the request body’s definition object to configure data validation rules.

name has a fixed set of valid values. Only rule names listed in the Data validation rule overview are supported. Metafield definition creation or update fails if you pass an unsupported rule name.

value is always a string in the API. Even if a rule semantically represents a number or an array, submit it as a string and do not omit the outer quotation marks.

Request examples​

Create a metafield definition with a single data validation rule​

Create a Size label metafield definition for products. Its metafield value can only be S, M, L, or XL.

curl --request POST 'https://{handle}.myshopline.com/admin/openapi/v20260901/metafield_definition.json' \
--header 'Content-Type: application/json; charset=utf-8' \
--header 'Authorization: Bearer {access_token}' \
--data '{
"definition": {
"owner_resource": "products",
"namespace": "$app:size_fields",
"key": "size_label",
"name": "Size label",
"type": "single_line_text_field",
"validations": [
{
"name": "choices",
"value": "[\"S\",\"M\",\"L\",\"XL\"]"
}
],
"access": {
"admin": "MERCHANT_READ_WRITE"
}
}
}'

Create a metafield definition with multiple data validation rules​

Create a Package weight metafield definition for products with the weight data type. Its metafield value is limited to 10g through 500g.

curl --request POST 'https://{handle}.myshopline.com/admin/openapi/v20260901/metafield_definition.json' \
--header 'Content-Type: application/json; charset=utf-8' \
--header 'Authorization: Bearer {access_token}' \
--data '{
"definition": {
"owner_resource": "products",
"namespace": "$app:spec_fields",
"key": "package_weight",
"name": "Package weight",
"type": "weight",
"validations": [
{
"name": "min",
"value": "{\"unit\":\"g\",\"value\":10}"
},
{
"name": "max",
"value": "{\"unit\":\"g\",\"value\":500}"
}
],
"access": {
"admin": "MERCHANT_READ_WRITE"
}
}
}'

Data validation rule overview​

The following table summarizes each rule name, meaning, supported data types (type), the rule value (value) format, and validation behavior when writing metafield values.

TIP

General constraints:

  • For list types (list.*), list.min and list.max limit the number of array elements. Other validation rules validate each nonempty element.
  • Starting with version v20260901, metafield values cannot be empty.
  • min must be less than or equal to max, list.min must be less than or equal to list.max, and scale_min must be less than or equal to scale_max.
Rule nameMeaningSupported data typesRule value formatValidation behavior
choicesPredefined option listsingle_line_text_field, list.single_line_text_fieldA nonempty JSON array of strings. Duplicate values and newline characters are not allowed.
Maximum size: 128
Maximum length: 300,000
The metafield value must be in the option list. For list types (list.*), each nonempty element is validated.
allowed_domainsAllowed URL domainsurl, list.url, link, list.linkA nonempty JSON array of strings. Each element must be a complete URL with an allowed protocol. Bare domain names are not supported.
Maximum size: 100
Validates url types directly. For link types, validates the url field.
file_type_optionsAllowed file typesfile_reference, list.file_referenceA JSON array of strings. An empty array means that file types are not restricted. For example, [\"Image\",\"Video\"] allows only image or video files, including JPEG, JPG, PNG, WEBP, SVG, GIF, and MP4 files.Validates against the configured file types.
list.minMinimum number of list elementsAll list types (list.*)A nonnegative integer string with a maximum value of 128.The number of array elements must not be less than this value.
list.maxMaximum number of list elementsAll list types (list.*)A nonnegative integer string with a maximum value of 128.The number of array elements must not be greater than this value.
minMinimum boundarysingle_line_text_field, multi_line_text_field, date, list.date, date_time, list.date_time, weight, list.weight, volume, list.volume, dimension, list.dimension, number_integer, list.number_integer, number_decimal, list.number_decimal, list.single_line_text_fieldThe format depends on the data type:
• date and date_time use the corresponding ISO 8601 format.
• number_decimal and list.number_decimal support negative values. Other numeric types support nonnegative values only.
The metafield value must not be less than the boundary. For list types, each nonempty element is validated.
maxMaximum boundarySame as min.Same as min.The metafield value must not be greater than the boundary. For list types, each nonempty element is validated.
max_precisionMaximum decimal precisionnumber_decimal, list.number_decimalA nonnegative integer string with a maximum value of 9.The number of decimal places must not exceed this value. For list types, each nonempty element is validated.
regexRegular expressionsingle_line_text_field, multi_line_text_field, list.single_line_text_fieldA regular expression string.The metafield value must match the regular expression configured in the metafield definition. For list types, each nonempty element is validated.
scale_minMinimum rating scalerating, list.ratingA decimal string. Must be configured with scale_max and must not be greater than scale_max.The metafield value must be greater than or equal to scale_min.
scale_maxMaximum rating scalerating, list.ratingA decimal string. Must be configured with scale_min and must not be less than scale_min.The metafield value must be less than or equal to scale_max.
schemaJSON Schema specificationjsonA JSON Schema specification string.The metafield value must comply with the JSON Schema specification.
metaobject_definition_idReferenced metaobject definition IDmetaobject_reference, list.metaobject_referenceA numeric ID or global ID (GID), for example, gid://shopline/MetaobjectDefinition/{id}.Validates whether the referenced metaobject definition exists.

Data validation rule details and examples​

choices: Predefined options​

Restricts metafield values to specified options. This rule is suitable for fixed-option scenarios such as size or flavor labels. For example:

"validations": [
{
"name": "choices",
"value": "[\"Floral\",\"Sweet\",\"Nutty\",\"Other\"]"
}
]

allowed_domains: Allowed domains​

Restricts url or link metafields to specified domains. This rule is suitable for social links and internal navigation. For example:

"validations": [
{
"name": "allowed_domains",
"value": "[\"https://www.shopline.com\",\"https://developer.shopline.com\"]"
}
]

file_type_options: File types​

Restricts the file types allowed for file reference metafields. For example, you can allow only image or video files:

"validations": [
{
"name": "file_type_options",
"value": "[\"Image\",\"Video\"]"
}
]

list.min and list.max: List length​

Restricts the number of elements in list metafields. For example:

"validations": [
{"name": "list.min", "value": "2"},
{"name": "list.max", "value": "5"}
]

min and max: Boundary values​

Restricts the minimum and maximum values of metafield values. The meaning of min and max depends on the data type of the metafield definition. You can use them to limit text length, date ranges, or numeric ranges. For example:

Text length example​

"validations": [
{"name": "min", "value": "8"},
{"name": "max", "value": "100"}
]

Date range example​

"validations": [
{"name": "min", "value": "2026-01-01"},
{"name": "max", "value": "2026-12-31"}
]

Weight range example​

"validations": [
{"name": "min", "value": "{\"unit\":\"g\",\"value\":10}"},
{"name": "max", "value": "{\"unit\":\"g\",\"value\":500}"}
]

max_precision: Decimal precision​

Restricts the number of decimal places for decimal metafields. For example:

"validations": [
{"name": "max_precision", "value": "2"}
]

regex: Regular expression​

Restricts the format of text metafield values. For example:

"validations": [
{
"name": "regex",
"value": "^[A-Z0-9]+$"
}
]

scale_min and scale_max: Rating scale​

Restricts the lower and upper bounds of rating metafields. For example:

"validations": [
{"name": "scale_min", "value": "1"},
{"name": "scale_max", "value": "5"}
]

schema: JSON Schema​

Restricts the format of json metafield values to comply with a specified JSON Schema. For example:

"validations": [
{
"name": "schema",
"value": "{\"type\":\"object\",\"properties\":{\"title\":{\"type\":\"string\"},\"stock\":{\"type\":\"integer\",\"minimum\":0}},\"required\":[\"title\"]}"
}
]

metaobject_definition_id: Metaobject reference​

Restricts metaobject reference metafields to reference metaobjects that belong to a specified metaobject definition. The following example passes the global ID (GID) of a metaobject definition to specify the metaobject definition that the metafield can reference:

"validations": [
{
"name": "metaobject_definition_id",
"value": "gid://shopline/MetaobjectDefinition/123"
}
]

You can also pass the numeric ID of a metaobject definition:

"validations": [
{"name": "metaobject_definition_id", "value": "123"}
]

Notes​

Before using data validation rules, note the following limitations and effects:

  • Data validation rules only constrain the range or format of metafield values. They cannot replace selecting a metafield data type.

  • After you modify the data validation rules of a metafield definition, SHOPLINE asynchronously scans existing metafield values. Metafield values that do not meet the rules are marked as invalid and can be viewed in the SHOPLINE Admin.

Was this article helpful to you?