From my understanding, the connector expects externalIds to be a list of strings, where each string is a JSON object.
Navigate to: Admin > Connections > Sources > [Your Google Workspace Source] > Account Schema.
Add New Attribute (or edit externalIds if it exists):
Name: externalIds (Must match the Google API field name exactly).
Type: string
Multi-Valued: Yes
Entitlement: No (unless you specifically want to govern it).
In your “Create” provisioning policy, you must generate the value as a JSON String.
Attribute: externalIds
Value Calculation: You need to construct the JSON string. You can use a Velocity Template or a Rule to build this string dynamically.
Example JSON Format (Single Value): If you are assigning one ID, the output of your transform/script for this attribute should be a single string looking like this:
JSON
{“value”: “1001”, “type”: “organization”}
Example JSON Format (Multiple Values): If the user has multiple external IDs, your transform should return a List of strings.
String 1: {“value”: “1001”, “type”: “organization”}
String 2: {“value”: “5678”, “type”: “account”}
Provisioning Policy Logic (Velocity Example):
#if($identity.employeeNumber)
{
"value": "$identity.employeeNumber",
"type": "organization"
}
#end
When the attribute is marked as Multi-Valued in the schema, the SailPoint connector automatically knows to wrap the values you provide into a JSON Array ([…]) when sending the request to Google’s API. If you do not mark it as multi-valued, the connector may try to send it as a single string object or fail to format the API request correctly, leading to the issues described in the forum posts.
I haven’t had the chance to test this as I don’t have a google workspace environment currently.