Describe the bug
sail transform preview throwing invalid "The request was syntactically correct but its content is
semantically invalid." error
To Reproduce Steps to reproduce the behavior:
Run sail transform preview and occasionally the API seems to get stuck thinking the transform is invalid.
I don't know how to "fix" this
Expected behavior Sailpoint transform preview should not cause an invalid error
Actual behavior When you run sailpoint transform preview with a valid transform, it seems that the cli is failing to upload it correctly (I think?)
Below is what is happening (sensitive data sanitized)
$ sail transform preview --file transform_files/ToLower.json --identity "${SAIL_IDENTITY}" --profile "${SAIL_IDENTITY_PROFILE_ID}" --debug
2025/09/30 10:42:14 DEBU <transform/preview.go:66> Filepath path=transform_files/ToLower.json
2025/09/30 10:42:14 DEBU <transform/preview.go:68> Transform transform="{Name:ToLower Type:lower Attributes:map[input:map[attributes:map[value:ACTIVE] type:static]] AdditionalProperties:map[id:8990e85c-e0e6-486f-895e-1aa81656b398 internal:true]}"
2025/09/30 10:42:14 WARN <config/config.go:421> Secrets storage is not currently functional on this platform, PAT will only work with environment variables additional information=URL
2025/09/30 10:42:14 WARN <config/config.go:421> Secrets storage is not currently functional on this platform, PAT will only work with environment variables additional information=URL
2025/09/30 10:42:14 DEBU <config/config.go:204> Token Debug Info user_name=Mike.Iversen@$DOMAIN org=$TENANT pod=stg06-useast1
2025/09/30 10:42:14 DEBU <go-retryablehttp@v0.7.7/client.go:663> [DEBUG] POST https://$TENANT.api.identitynow.com/v2024/transforms
2025/09/30 10:42:14 DEBU <go-retryablehttp@v0.7.7/client.go:663> [DEBUG] POST https://$TENANT.api.identitynow.com/beta/identity-attributes
2025/09/30 10:42:15 DEBU <transform/preview.go:257> Cleaning up identity attribute object
2025/09/30 10:42:15 DEBU <go-retryablehttp@v0.7.7/client.go:663> [DEBUG] DELETE https://$TENANT.api.identitynow.com/beta/identity-attributes/
2025/09/30 10:42:15 DEBU <transform/preview.go:246> Cleaning up preview objects
2025/09/30 10:42:15 DEBU <go-retryablehttp@v0.7.7/client.go:663> [DEBUG] DELETE https://$TENANT.api.identitynow.com/v2024/transforms/b49a1cbf-8456-4da6-be1c-ef78727fa698
Error:
Issues calling API
## Headers:
{
"Access-Control-Allow-Origin": [
"*"
],
"Access-Control-Expose-Headers": [
"Access-Control-Allow-Origin,Retry-After,Content-Length,Content-
Encoding,Date,Vary,Access-Control-Max-Age,Cache-Control,SLPT-Request-ID,X-Robots-
Tag,Content-Type,Strict-Transport-Security"
],
"Access-Control-Max-Age": [
"3600"
],
"Cache-Control": [
"no-cache, no-store, must-revalidate"
],
"Cf-Cache-Status": [
"DYNAMIC"
],
"Cf-Ray": [
"9874d43eba1cf162-CMH"
],
"Connection": [
"keep-alive"
],
"Content-Encoding": [
"UTF-8"
],
"Content-Length": [
"377"
],
"Content-Type": [
"application/json;charset=utf-8"
],
"Date": [
"Tue, 30 Sep 2025 15:42:15 GMT"
],
"Server": [
"cloudflare"
],
"Slpt-Request-Id": [
"af688c97b37f4194960396da82fe6296"
],
"Strict-Transport-Security": [
"max-age=7776000; includeSubDomains"
],
"Vary": [
"Origin",
"Access-Control-Request-Method",
"Access-Control-Request-Headers",
"accept-encoding"
],
"X-Robots-Tag": [
"none",
"none"
]
}
## Body:
{
"causes": [],
"detailCode": "400.1 Bad request content",
"messages": [
{
"locale": "en-US",
"localeOrigin": "DEFAULT",
"text": "The request was syntactically correct but its content is
semantically invalid."
},
{
"locale": "und",
"localeOrigin": "REQUEST",
"text": "The request was syntactically correct but its content is
semantically invalid."
}
],
"trackingId": "af688c97b37f4194960396da82fe6296"
}
$ cat transform_files/ToLower.json
{
"id": "8990e85c-e0e6-486f-895e-1aa81656b398",
"attributes": {
"input": {
"attributes": {
"value": "ACTIVE"
},
"type": "static"
}
},
"internal": true,
"name": "ToLower",
"type": "lower"
}
Note: ToLower.json is a sailpoint provided transform and the only thing I did was add the static attribute to it so that it is usable.
Additional notes, I can upload this transform just fine with curl which means the actual transform is not the issue
$ curl --location 'https://interpublic-sb.api.identitynow.com/v2024/transforms' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $TOKEN" \
--data '{
"id": "8990e85c-e0e6-486f-895e-1aa81656b398",
"attributes": {
"input": {
"attributes": {
"value": "ACTIVE"
},
"type": "static"
}
},
"internal": true,
"name": "ToLower-Preview",
"type": "lower"
}'
{"id":"1feb442a-fc48-4e6d-9665-d0703d52434e","name":"ToLower-Preview","type":"lower","attributes":{"input":{"attributes":{"value":"ACTIVE"},"type":"static"}},"internal":false}
This leads me to believe there is some weird caching going on that is causing the selected transform to not be uploaded properly?
Operating System (please complete the following information):
- OS: RHEL 8.10
- CLI Environment: Zsh
- Version: 2.2.5
Additional context
I have been noticing some general weirdness with the sail transform command and suddenly I hit this wall and am unable to do anything with it. Things I have noticed as I waded into using the cli
- You must have identity profile management and read permissions for your PAT
- This is not called out (though it does make sense)
--transforms-endpoint is not respected. I have tried to use it to force a different version of the API while debugging this issue but no matter what, it always seems to use a mixture of /v2024 and /beta (not /v3 as the help doc states)
- Periodically the transform cli command will fail to delete the uploaded transform, causing it to fail to run a second time since the initial transform still exists.
I would love to help debug this but I do not know go well at all. I am more than happy to provide whatever info I can though!
Describe the bug
sail transform preview throwing invalid "The request was syntactically correct but its content is
semantically invalid." error
To Reproduce Steps to reproduce the behavior:
Run
sail transform previewand occasionally the API seems to get stuck thinking the transform is invalid.I don't know how to "fix" this
Expected behavior Sailpoint transform preview should not cause an invalid error
Actual behavior When you run sailpoint transform preview with a valid transform, it seems that the cli is failing to upload it correctly (I think?)
Below is what is happening (sensitive data sanitized)
Note:
ToLower.jsonis a sailpoint provided transform and the only thing I did was add the static attribute to it so that it is usable.Additional notes, I can upload this transform just fine with curl which means the actual transform is not the issue
This leads me to believe there is some weird caching going on that is causing the selected transform to not be uploaded properly?
Operating System (please complete the following information):
Additional context
I have been noticing some general weirdness with the
sail transformcommand and suddenly I hit this wall and am unable to do anything with it. Things I have noticed as I waded into using the cli--transforms-endpointis not respected. I have tried to use it to force a different version of the API while debugging this issue but no matter what, it always seems to use a mixture of/v2024and/beta(not/v3as the help doc states)I would love to help debug this but I do not know go well at all. I am more than happy to provide whatever info I can though!