← SailPoint ISC Greenfield Implementation Field Guide

SailPoint ISC Greenfield Implementation Field Guide

API Recipes and Symptom Lookup

The last page is for the person on call. It lists the read-only API calls that explain most situations, then a symptom table generalised from the runbooks of several integrations. Everything here is safe to try first; none of the calls change anything unless marked.

Read-only API calls

Use a token with read scope. Version prefixes (v2025, beta) change over time, so confirm them against the current API reference.

text
GET  /v2025/sources/{id}
GET  /v2025/sources/{id}/schemas
GET  /v2025/sources/{id}/provisioning-policies
GET  /beta/sources/{id}/schedules
GET  /v2025/connector-rules
GET  /v2025/connector-rules/{id}
GET  /v2025/entitlements?filters=source.id eq "{id}"
GET  /v2025/access-profiles?limit=250
GET  /beta/source-apps
GET  /beta/source-apps/{id}/access-profiles?limit=250
GET  /v2025/roles
GET  /v2025/workflows
GET  /v2025/workflows/{id}
GET  /v2025/form-definitions
GET  /v2025/form-definitions/{id}
GET  /v2025/launchers
GET  /v2025/identity-profiles
POST /v2025/search
CallUse it toWatch out for
Source, schemas, provisioning policiesSee what a source is configured to doA source can be configured to do nothing while rules do the work
SchedulesFind sources with no aggregation scheduleAn empty list is the finding
Connector rules, by idRead the scriptReturns the script in clear text, including any embedded credential. Do not paste the output anywhere
Entitlements filtered by sourceCount and inspectCounts that halve between runs mean a truncated load
Access profilesInventoryPage at 250
Source apps and their sub-resourceSee which profiles a tile holdsThe list payload shows empty arrays. Use the sub-resource, and a limit above 250 returns an empty list silently
RolesInventory criteria rolesRead the criteria; membership is attribute-driven
Workflows and form definitionsInspect triggers and stepsSecrets may be present. A launcher-driven form instance shows formData only in the list call
LaunchersSee what is exposed to usersNot patchable
Identity profilesCheck mappingsCompare sandbox and production
Search (POST)Aggregations for counts, status and freshnessThe best monitoring tool in the platform

Two calls that change things

  • POST /v2025/accounts runs the connector's create operation and its before-rules. Use it to prove a create works. Use a test identity.
  • Configuration export with type RULE is the way to read cloud rules, which cannot be fetched with GET. Treat the export as sensitive.

Search recipes

Run these through the search API against the identities, accounts and entitlements indices. The query strings are ideas, not tested syntax: confirm the field names on your tenant first.

QuestionQuery idea
Which sources have not aggregated recently?Aggregation on the last aggregation date attribute, sorted ascending
How many disabled accounts on a source?Accounts query: source.name:"X" AND disabled:true, count only
Who is uncorrelated?Accounts query: uncorrelated:true on the source
Which entitlements are directly requestable?Entitlements query on requestable:true and compare with the intended set
Did a literal placeholder leak?An accounts or entitlements query for the placeholder string a rule is supposed to replace
Who joined or left last night?Identities query on created date or lifecycle state, with the attributes you want in the export

Symptom lookup

Generalised from the runbooks of one REST integration, one JDBC integration with two instances and one REST integration for a finance system. Each row says what to suspect first, not the only possibility.

Aggregation and data

SymptomMost likely causeCheck
Aggregation fails right at the startToken endpoint unreachable, or the client credentials were rotatedTest the token call from the appliance's network
Aggregation "succeeds" but accounts carry error textThe error-detection settings in the source were altered, or the application changed its error wordingCompare the error strings with the source configuration
Some accounts missing entirely, no errorA page-size ceiling is reached; overflow is droppedCount accounts against the source; look for a count equal to a page size
A whole aggregation row vanished with no errorAn unguarded cast in a rule threw on a missing or null fieldRead the after-rule for casts; test with null
Every account shows as enabledA status comparison in the after-rule stopped matching, or the call that fetches disabled users could not be madeLook for a "no token" or "skipping" log line; test the comparison against a live value
Many uncorrelated accountsEmail or login mismatch, including case; no fallback ruleCompare the correlation attribute on both sides, case-sensitively
Entitlement counts halvedA truncated aggregationRun again and compare; check paging
Entitlement values changed en masseExpected when the application re-mints identifiers on editConfirm with the owner before assuming a fault
An access review shows no admin-level accessAn agreed exclusion in the integrationCheck the exclusion list
A user in the application is not in ISCA filter restricts the integration to employeesCheck the filter
A role exists in the application but not in ISCNobody holds it and groups are not aggregatedRun a group aggregation
Aggregation deleted accountsThe delete threshold let a partial response throughCheck the threshold and the response size
Catalogue is out of dateEntitlement aggregation has no scheduleCheck schedules; run by hand
A search or API call for a schema or rule returns nothingA double space in the nameCopy the exact name from the export

Provisioning and requests

SymptomMost likely causeCheck
Account creation fails or hangs with no clear reasonA debug webhook in a before-create rule is enabled and its listener is downLook for a debug flag set true
A literal placeholder (for example COMPUTED_BY_RULE) appears in the targetThe before-create rule did not runCheck rule attachment
Revocation reported success but the target did not changeA parse of the entitlement value failed in the before-ruleCompare the value format with what the rule expects
Enable failed with no useful errorA logger or webhook call in a before-enable ruleRead the rule
Entitlement add or remove did nothingThe rule logged "empty, skipping" and exitedLook for the skip message
Fewer assignments than requestedMalformed entries skipped, or a name contained a delimiterCheck the delimiter
A name or email change did not reach the applicationThere is no update policy or update endpointCheck the provisioning policies
A group is missing from the requestable setThe catalogue is a hard-coded listRead the query that defines it
An operation works on one instance but not the otherThe two rules handle different operationsCompare the rule operations
Behaviour changed on both instances after one rule editThe rule is sharedLook at which sources the rule is attached to
Delete refused although the feature list says it is supportedThe rule refuses itRead the rule
Reading an endpoint body does not match what the application receivesThe endpoint body is dead configuration and a rule replaces itRead the rule, not the endpoint

Requests, forms and workflows

SymptomMost likely causeCheck
Several requests in a row from one person all CANCELLEDA call exceeded the appliance timeout (63 seconds measured) and wedged that requester for about an hourCheck the earliest failing request for duration
An approval never appearedThe approval expired without reminders or a fallback, which looks the same as never arrivingLook at the approval's history
A literal {{ in a payload or messageA template path did not resolveCheck the field name, including casing
The manager never received the formThe manager attribute is wrong or the notification went elsewhereCheck the manager attribute and the notification routing
Credentials mail went to the wrong personRouting by role after a manager changeCheck the template recipient
No Launch buttonThe launcher is not assigned or its workflow is disabledCheck the assignment and the workflow state
A workflow works in the UI but fails after an API editThe PUT wiped the secretsRe-create the secrets in the UI
A workflow save returns 200, but enabling failsValidation runs on enableFix the named violation; check the step names
A form option list is emptyThe data-source query does not interpolate form valuesTest with a literal
Users ask where to request an applicationThere is no tileGive them the naming convention to search

Cluster and infrastructure

SymptomMost likely causeCheck
Several integrations on the same cluster fail togetherThe cluster, or a shared service account, is the problemCheck cluster status and the shared login
One integration fails while its cluster peers are fineIts own network path, such as egress or DNS to an external hostTest the route from the appliance
A cluster in a warning stateA cluster with a single appliance has no redundancyCheck appliance count

Directory and lifecycle

SymptomMost likely causeCheck
Group membership gone after the leaver dateNo allow-list or delay in the leaver flowReview the leaver actions
Leaver not disabled on an applicationThe application is not in the lifecycle action source listRead the list
Account disabled a day early or lateThe end date or the time zone is wrongCheck the HR record and the identity's time zone
Joiners missing from the directoryA start date outside the processing window, or a missing mandatory fieldCheck the joiner search export
A rehired person has two accountsThe rehire flow did not match the existing identityCheck the join key

Making a change safely

  1. Read the current configuration with the calls above and save a copy.
  2. Change it in sandbox.
  3. Test with a single object before many.
  4. Check what else uses the thing: a rule attached to two sources, an attribute used by correlation, a form a launcher points at.
  5. Deploy, then verify with a search, not by trusting the 200.
  6. Update the runbook and the lifecycle source list if you added a source.

Added from SailPoint's documentation

Force a re-correlation

Accounts that stay uncorrelated after you fix a correlation rule or the data it matches were probably skipped by an optimized aggregation, which does not re-run correlation for unchanged accounts. The UI always runs optimized. Through the API, call the account-load endpoint for the source with disableOptimization=true. It applies to that run only, reprocesses every record, and keeps manually correlated accounts. Check the delete threshold first, because an unoptimized run touches everything.

Pace your scripts

The default allowance is 100 requests per client ID and API version per 10 seconds. A 429 response carries Retry-After. Sleep for that many seconds, then retry. Give automation its own API client.

More symptoms

SymptomMost likely causeCheck
Still uncorrelated after fixing the data or the ruleOptimized aggregation skipped unchanged accountsRun an unoptimized aggregation through the API
Aggregation cancelled with a warning about deletionsThe delete threshold stopped a bulk deleteCompare the account count with the source before raising the threshold
One entitlement per account in a flat-file sourceThe delimited file is not sorted by account IDSort on the id column
Import reports COMPLETE but objects are missingThe object type is not importable and was skipped silentlyCompare an export before and after; use preview=true
A deployed non-employee source behaves like a normal sourceNon-employee sources cannot be deployedRecreate it in the target
Schedule fires an hour off after a clock changeSchedules follow the cluster time zone and do not shift for daylight savingCheck the cluster time zone
Workflow errors in the first hours after enabling the featureFirst enablement can take up to two hoursWait, then retest
Parallel-loop workflow fails on a large inputMore than 250 itemsChunk the input or use a serial loop
Item reassigned to an unexpected reviewerThe four-hop reassignment limit, or the self-review checkRead the reassignment history

Actions

  • Save the read-only list and the symptom tables where on-call engineers can find them.
  • Teach the team that a 200 on a PUT is not proof, and that the search API is the verification tool.
  • Add symptoms from your own incidents, with the check that found the cause.