Web Services Connector - Unable to Pass Entitlement Value in Account Creation HTTP Operation

I’m currently configuring a Web Services connector and encountering an issue with the “Account Creation” HTTP operation.

Problem:

  • I need to include an entitlement value (02y3w24723a54gu) in the request URL
  • When using the $plan.group$ variable, it returns an empty/null value instead of the expected entitlement ID

Current Configuration:

  • Operation: Account Creation (HTTP)
  • Expected entitlement value: 02y3w24723a54gu
  • Variable used: $plan.group$ (returning empty)

Questions:

  1. What’s the correct variable syntax to retrieve the entitlement value in the URL?
  2. Are there alternative variables I should be using instead of $plan.group$?
  3. Is there a specific configuration step I might be missing for entitlement mapping?

Additional Context:

  • Connector type: Web Services
  • Integration phase: Account Creation setup
  • Any documentation references or similar examples would be greatly appreciated

Has anyone encountered this issue before or knows the proper way to pass entitlement values in Web Services connector URLs?

Thank you for your assistance!

Best regards,
Khalil

Hey Khalil,

You have to enable the “createAccountWithEntReq” attribute in the source’s additional settings.

The variable syntax should be correct if it’s the same attribute in the account schema.
This is described better in this documentation : https://community.sailpoint.com/t5/IdentityNow-Connectors/Web-Services-Source-Configuration-Reference-Guide/ta-p/78511

2 Likes

Hi @PValarezo ,
Thank you for your reply. Indeed, using $plan.group$ made the group value showing up now, but there’s still an issue, it’s adding special encoded characters, as follows:

Any idea how to get rid of them?

[UPDATE 1]: Here’s the account schema

Thank you for your help.

Can you try below syntex to add plan variable in context URL
${plan.variableName}

Hi @khalilgahbiche

Seems to me like the issue is now with the body of the request. Are you passing the native identity in the body and i think the key for the native identity is memberKey as shown in the error message which is coming as blank.

It could be because you are using $plan.nativeIdentity in the body during the create account operation but the native identity will not be available yet. Or I have also seen the account id attribute here as in your case is primaryEmail so if you use $plan.PrimaryEmail in create account then also it will not be populated, So i suggest you can add one more attribute in the create provisioning policy which should contain the same value like primaryEmail attribute and then use that variable.
If that also does not help then try perhaps sharing the body here so we can assist you further.

Also how is the setup for you, do you need to pass the entitlements during create account operation ?
If it is not mandatory to pass the entitlements during the create operation then you should remove the check box “Create Account with Ent Request” and configure another operation for add entitlements. There you can use the $plan.nativeIdentity keyword as the account is available for ISC now.

I hope this helps.

Regards
Vikas.

The encoded values are the brackets and quotes that ISC is wrapping around your variable. It automatically assumes that since your “group” attribute is multivalued, that it needs to be in an array. Since you want to only add a single entitlement at a time, edit your source in VSCode - in the “connectorAttributes” section - add the flag:
“addRemoveEntInSingleReq”: false

Hi @vguleria ,
Thank you for your reply.
I’ve made some changes as follows:

  • Fixed group value to isolate the issue
  • Added a mapping between the identity “Work Email” and source “primaryEmail” attributes
  • Updated the body to send the “primaryEmail” value

The error message is showing my identity and my email address correctly, but I’m wondering if the issue is related to SailPoint or Google API

To give you a bit of contexte, we’re trying to add a user from Google Workspace “Domain A” to a Google Workspace group in “Domain B”. The destination group is configured to accept external users membership. We don’t want users to be created on the “Domain B” google workspace tenant, that’s why I’m sending a group membership request on the Account Creation operation

1 Like

Hi @khalilgahbiche

The error message says that you are missing field “memberKey” in the request body. Can you please try to run this API locally from postman and see if that works ?

That might help then to setup the connector.

Thank You.
Regards
Vikas.

@vguleria it’s working from Postman

Hi @KevinHarrington ,

Thank you for your reply.
I did add the “addRemoveEntInSingleReq”: false flag but still the group ID is sent between brackets.

Hi @khalilgahbiche

Can you please try to name attribute “primaryEmail” with some other value in create account policy something like “userEmail” and then try to update the body like

{
"email":"$plan.userEmail$",
"role":"MEMBER"
}

Please give this a try. Also you may want to enable the ccg logs for web service connector if this still does not work and then you can see the complete payload being passed by ISC.
Plus small note, since after creating the identity you are able to id generate id in the response of the create API, i would suggest not to use the primayEmail as accountID attribute but once the user is created then read the id generated in the response mapping and use that as account id attribute.

Btw are there any additional headers you are adding in the postman which are missing ?

Please try the above suggestion and let me know if that helps. If any questions, please let me know.

Regards
Vikas

Can you try with a boolean, not a string? remove the quotes around “false”. Also, there’s a chance that this could just remove the brackets, but keep the quotes intact. Can you validate whether that is happening?

1 Like

@vguleria ,

I’ve updated the provisioning policy by adding a new attribute called “userEmail” which is mapped to the same identity attribute “Work Email”

Then used it in the HTTP Request body

The issue isn’t the same, it’s not mentioning the missing “memberkey” anymore, but it seems to return a truncated email value.

Then I reverted back the HTTP Operation body to use $plan.primaryEmail$

and this time, the issue refers again to a missing “memberkey”

Conclusion

It seems your solution is partially working, I don’t know why it’s partially showing the email address and not the primaryEmail attribute.

Any idea how to get the entire email value?

Thank you for your help.

Hi @khalilgahbiche

I think you missed to add the double quotes around the userEmail. So it should be something like

{

{
"email":"$plan.userEmail$",
"role":"MEMBER"
}
}

So that is why it is complaining about the invalid json.

Can you please try adding double quotes and see the result. I do not think the issue is with trimmed values.

Thank You.
Regards
Vikas.

1 Like

Hey @vguleria ,

Thanks, it did work :+1:

Now, I need to fix the issue around the group id sent in the url. I’ll keep you posted.

Hey @KevinHarrington ,

I updated the source to remove the quotes around the ‘false’ value

image

But the group id is still sent with square brackets and quotes

image

Thank you for your help.

This is expected when the “group” attribute in the account schema is multi-valued.

Hey @prashanthrns ,

Indeed, when I disable the “multi-valued” option it works.

I’m wondering what happens if the users requests an Access Profile with two or more groups. I’ll test and keep you posted.

Thank you for your help.

  • When a user requests this Access Profile, IDN generates a provisioning plan containing the requested entitlements.
  • The $plan.roles$ variable aggregates the requested roles. Since roles is single-valued, IDN combines the entitlements into a single string, typically comma-separated, based on the connector’s configuration or API expectations.

Eg:

Example access profile :
{
“name”: “HCM Admin Profile”,
“entitlements”: [
{“value”: “Active”, “attribute”: “roles”},
{“value”: “Admin”, “attribute”: “roles”}
]
}

Sent JSON body

{
“userEmail”: “[email protected]”,
“roles”: “Active,Admin”
}

If the above doesnt get parsed automatically (roles in CSV values), we may have to write webservicebefore operation rule to do the same.