[Update] 13 New Data Types Including integer and json Have Been Added to AWS Systems Manager Parameter Store
This page has been translated by machine translation. View original
Hello. I'm Takeda from the Service Development Department.
On November 5, 2026, 13 new data types that can be assigned to AWS Systems Manager Parameter Store parameters were added. If you assign a type, values that don't match the type are rejected at the time of PutParameter.
Until now, the available DataType values were only the default text, which performs no validation, aws:ec2:image for AMI IDs, and aws:ssm:integration for Automation webhooks. Format checks for port numbers and IP addresses had to be written on the application side or handled with a regular expression in AllowedPattern. This time I tried all 13 types from the AWS CLI.
Newly added data types
The 13 types listed in the user guide are as follows.
| Type | Validation | StringList | Tier |
|---|---|---|---|
aws:region |
An existing Region name | Not supported | Standard supported |
aws:account:id |
12-digit format. Does not check whether the account exists | Supported | Standard supported |
boolean |
true / false (lowercase, uppercase, capitalized) and 0 / 1 |
Not supported | Standard supported |
integer |
Signed 32-bit integer | Not supported | Standard supported |
float |
64-bit floating-point number | Not supported | Standard supported |
binary |
Only 0 and 1 |
Not supported | Standard supported |
hostname |
Hostname | Not supported | Standard supported |
email |
Email address | Supported | Standard supported |
ipv4-address |
A single IPv4 address | Supported | Standard supported |
ipv6-address |
A single IPv6 address | Supported | Standard supported |
url |
URL including a scheme and host | Not supported | Advanced only |
json |
JSON whose top level is an object or array | Not supported | Advanced only |
jsonc |
JSON with comments | Not supported | Advanced only |
All 13 added types also support SecureString.
Test environment
- AWS CLI 2.36.30
- Tokyo Region (ap-northeast-1)
- Tested on November 9, 2026
Values that don't match the type are rejected by PutParameter
All you need to do is add --data-type when calling put-parameter.
aws ssm put-parameter --name /myapp/port --type String --data-type integer --value 443
If you pass a value that doesn't match the type, you get a ValidationException.
An error occurred (ValidationException) when calling the PutParameter operation: The parameter value is not a valid integer. A value must be an optional minus sign followed by digits, with no leading zeros, no plus sign, no decimal point and no whitespace.
For the 10 types available in the standard tier, I tried values that pass and values that are rejected. The results are as follows.
| Type | Accepted values | Rejected values |
|---|---|---|
aws:region |
us-east-1, af-south-1 |
us-east-9, Tokyo |
aws:account:id |
123456789012 |
1234-5678-9012, 11 digits |
boolean |
true, FALSE, 1 |
tRue, yes |
integer |
443, -42, 2147483647 |
2147483648, 007, +7, 7.0 |
float |
3.14, 1e5 |
NaN, Infinity, 1e-999, 1e999 |
binary |
0011 |
012, QUJD |
hostname |
www.example.com, myhost, xn--wgv71a119e.jp |
_dmarc.example.com, 192.0.2.1, 日本語.jp |
email |
user@example.com |
Mary <mary@example.com>, user@localhost |
ipv4-address |
192.0.2.1 |
10.0.0.0/16, 192.168.001.1, 192.0.2.1:80 |
ipv6-address |
2001:db8::1, 2001:db8:0:0:0:0:0:1 |
2001:db8::/32, [2001:db8::1], fe80::1%en0 |
All results matched the documentation. The error messages even tell you the reason. For an out-of-range integer, it returned "outside the supported integer range". For an underscore in hostname, it says "It contains an underscore". For Japanese domain names, it guides you to write them in punycode with "Give an internationalized name in punycode (xn--)."
Formats with a display name such as Mary <mary@example.com> for email were rejected because they contain whitespace.
The parameter value is not a valid email address. It contains whitespace or a control character.
When you get the type name wrong, it tells you that type names are all lowercase.
The following data type is not supported: int. (Data type names are all lowercase.)
url, json, and jsonc require the advanced tier
The results of testing in the advanced tier are as follows.
| Type | Accepted values | Rejected values and messages |
|---|---|---|
url |
https://example.com, ftp://example.com/path |
example.com and mailto:user@example.com gave "It must start with a scheme followed by ://", and https://user:pass@example.com gave "It contains a password. Store secrets in AWS Secrets Manager." |
json |
{"port":443}, [1,2] |
42 gave "must be a JSON object or array", {"a":1,"a":2} gave "duplicate object key", and a trailing comma and comments gave "not valid JSON" |
jsonc |
{"port":443 /* HTTPS */}, a value with a // line comment |
A trailing comma gave "not valid JSONC" |
For a URL containing a password, the message urges you to use Secrets Manager.
Specifying json in the standard tier results in the following error. It was the same when --tier was omitted.
The json data type is only supported for advanced parameters.
When I added --tier Intelligent-Tiering, the parameter was created in the advanced tier. Advanced-tier parameters incur storage charges, so if you only want to use the json type, check the pricing first.
StringList and SecureString
For StringList, each element is validated, and the message shows which element is invalid.
aws ssm put-parameter --name /myapp/notify-to --type StringList --data-type email \
--value 'a@example.com,bad'
Element 2 of the StringList: The parameter value is not a valid email address. It has no @.
If you specify a type that doesn't support StringList, the creation itself fails.
The integer data type is not supported for the following input type: StringList
Validation works the same way for SecureString. The message when I entered S3cretValue with the integer type was the same as for String. The message does not include the value.
If you omit the type when overwriting, the existing type is inherited
The type of an existing parameter can be changed later. The results of operations on a single parameter, in order from the top, are as follows.
| Step | Result | Type |
|---|---|---|
1. Create abc without specifying a type |
Success | text |
2. Overwrite abc with --data-type integer |
Failure | Remains text |
3. Overwrite with 1 using --data-type integer |
Success | integer |
4. Overwrite with notanint without specifying a type |
Failure | Remains integer |
5. Overwrite with 2 without specifying a type |
Success | integer |
6. Overwrite with notanint using --data-type text |
Success | text |
Step 4 deserves attention. If you omit --data-type when overwriting, the type does not revert to the default text; the existing integer is inherited and validation continues.
The type not being dropped when the value changes is the safe behavior. When you want to remove validation, explicitly specify --data-type text.
When changing to an advanced-only type such as json, it fails unless you also specify --tier Advanced.
Values are returned as strings when retrieved
Even when you retrieve a parameter of the integer type, the value is a string.
aws ssm get-parameter --name /myapp/port \
--query 'Parameter.{Value:Value,Type:Type,DataType:DataType}'
{
"Value": "443",
"Type": "String",
"DataType": "integer"
}
The conversion to a number on the application side is still necessary, as before. All the type guarantees is that the value can be converted to a number.
With describe-parameters, you can filter by type.
aws ssm describe-parameters --parameter-filters Key=DataType,Values=json,jsonc
Passing a nonexistent type name resulted in InvalidFilterValue.
Summary
All 13 types were validated according to the boundary values described in the documentation. You can use them just by adding --data-type to an existing put-parameter, and validation is not dropped even if you omit the type when overwriting.
Port number and IP address checks that you used to write with AllowedPattern regular expressions look like they can be replaced with types while staying in the standard tier.
I hope this is helpful to someone.