Skip to content

[Bug] sail transform preview throwing invalid "The request was syntactically correct but its content is semantically invalid." error #210

@michaeliversen-IPG

Description

@michaeliversen-IPG

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!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions