Please be sure you’ve read the docs and API specs before asking for help. Also, please be sure you’ve searched the forum for your answer before you create a new topic.
Custom SaaS Connector: Delta Aggregation not being triggered in ISC tenant
Hi everyone,
I’m developing a custom SaaS Connector and I’m trying to implement Delta Aggregation for accounts and entitlements.
I followed the SailPoint documentation for the account-list command and the Delta Aggregation State implementation:
I also used the following discussion as a reference:
My connector has supportsStatefulCommands enabled:
"supportsStatefulCommands": true
I also added the spConnEnableDeltaAggregation configuration:
{
"key": "spConnEnableDeltaAggregation",
"label": "Enable Delta Aggregation",
"type": "checkbox",
"required": true,
"helpKey": "When enabled, the connector honors ISC's `stateful` flag and returns only records changed since the last successful aggregation. The full aggregation path is preserved as a fallback when no state is present."
}
My stdAccountList implementation is currently:
.stdAccountList(async (_context, input, res) => {
logger.info({ input }, 'Running outsourced employee list')
const isDelta = shouldUseDeltaAggregation(config, input)
const since = isDelta ? resolveStateDate(input) : undefined
logger.info(
{ since, stateful: isDelta, mode: isDelta ? 'delta' : 'full' },
isDelta
? 'Delta aggregation enabled — fetching outsourced employees updated since last run'
: 'Running full aggregation (current behavior)'
)
for await (const outsourcedEmployee of outsourcedEmployeeClient.stdOutsourcedEmployeelist(
since
)) {
res.send(outsourcedEmployee)
}
res.saveState(buildSaveState())
})
The function that determines whether the aggregation should run in delta mode is:
function shouldUseDeltaAggregation(
config: ConfigSchemaProps,
input: {
stateful?: boolean
state?: {
lastRun?: string
previousLastRun?: string
}
}
): boolean {
return (
config.spConnEnableDeltaAggregation === true &&
input?.stateful !== undefined &&
input?.stateful === true &&
input?.state != undefined
)
}
Current behavior
When I test the connector locally using Postman, I can successfully trigger the stateful request and the connector correctly enters the delta path.
However, when the connector is deployed to an ISC tenant and I run an account aggregation, the connector does not appear to receive the request with stateful: true. As a result, the connector always executes the full aggregation path.
My main question is:
What is the correct way to configure and implement Delta Aggregation for a custom SaaS Connector so that ISC actually triggers the stateful/delta aggregation during a real account aggregation?
More specifically:
-
Is there any additional configuration required in ISC to enable Delta Aggregation for a custom SaaS Connector?
-
How does ISC determine when to send
stateful: trueto thestdAccountListcommand? -
Does the account source need to be configured in a specific way for Delta Aggregation to be triggered?
-
Is
res.saveState()sufficient to persist the state between aggregation executions, or is there anything else that needs to be implemented? -
Is there a specific aggregation type or option in ISC that needs to be selected to execute a Delta Aggregation?
-
Is Delta Aggregation supported automatically for custom SaaS Connectors, or does it require additional configuration on the connector/source side?
-
How should the state be handled when the connector needs to aggregate both accounts and entitlements?
The important point is that the delta implementation works correctly when I manually send the expected stateful request locally, but I cannot get ISC to trigger this behavior in the tenant.
Any guidance on the correct ISC configuration or expected flow for triggering Delta Aggregation would be greatly appreciated.Please consider addressing the following when creating your topic:
- What have you tried?
- What errors did you face (share screenshots)?
- Share the details of your efforts (code / search query, workflow json etc.)?
- What is the result you are getting and what were you expecting?