-
Notifications
You must be signed in to change notification settings - Fork 30
Description
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-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)- 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!