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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions