Skip to main content

Uploading Data to Flat File Sources

SailPoint certifications review access data loaded into ISC from sources. For apps without a direct connector, use flat file sources — uploading CSV files of accounts and entitlements.

Three Ways to Upload

MethodBest forJava required?
TypeScript SDK (this project)Automated/scheduled uploads, CI/CD, validationNo
SailPoint CLI (sail api)Quick one-off uploads from the terminalNo
File Upload Utility (Java JAR)Legacy bulk uploads, built-in batchingYes (11+)

Upload accounts or entitlements to any flat file source via the SailPoint API. Streams files to avoid loading them entirely into memory — safe for files up to 500 MB.

Build

just build
# or: npm run build

Find Your Source ID

Your source ID is a 32-character hex string. Find it in the ISC admin console:

  1. Go to Admin > Connections > Sources
  2. Click on your flat file source
  3. The source ID is in the URL: https://{tenant}.identitynow.com/ui/admin/sources/{sourceId}

Or via the CLI:

just sources
# or: sail api get "/v3/sources" | grep -E '"id"|"name"'

Prepare Your CSV

Use the sample files in data/ as templates. Your CSV must match the schema defined on your source.

Accounts CSV:

id,name,email,department,entitlements
jsmith,John Smith,jsmith@acme.com,Engineering,"ENT001,ENT002"

Entitlements CSV (4 required columns):

id,name,displayName,description
ENT001,read_access,Read Access,Read-only access to shared resources

Validate (Dry Run)

Always validate before uploading:

just upload-dry <your-source-id> data/accounts.csv

Upload

# Upload accounts
just upload <your-source-id> data/accounts.csv

# Upload entitlements
just upload-entitlements <your-source-id> data/entitlements.csv

On success you'll see Upload accepted (202) with a task ID.

All Options

node dist/upload_accounts.js --sourceId <id> --file <path> [options]

Required:
--sourceId <id> Source ID (32-char hex from ISC)
--file <path> Path to CSV file

Options:
--type <type> "accounts" (default) or "entitlements"
--disableOptimization Reprocess all records, not just changes
--dryRun Validate the file without uploading
--help Show this help

Troubleshooting

ErrorCauseFix
No config.json foundMissing credentialsCopy config.json.example and fill in values
API Error 401Bad credentialsCheck ClientId/ClientSecret in config.json
API Error 403Insufficient permissionsPAT needs ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN
API Error 400CSV doesn't match source schemaDownload the schema template from ISC
File exceeds 500 MB limitFile too largeSplit into files of 400,000 rows or fewer
Entitlement CSV missing required columnsWrong headersMust have: id, name, displayName, description

CLI Method (Quick One-Off)

sail api post "/beta/sources/{sourceId}/load-accounts" -f "file=@accounts.csv"

File Constraints

ConstraintAccountsEntitlements
Max file size500 MB1 MB
Max records400,000 per file (recommended)2 million per aggregation
EncodingUTF-8UTF-8
SortingMust be sorted by account ID
Special charsNo emojis, no +No emojis, no +
Description lengthTruncated at 2,000 chars

File Upload Utility (Java)

The File Upload Utility (v4.1.0) automates bulk file uploads for account and entitlement aggregations. Requires Java 11+.

java -jar file-upload-utility/sailpoint-file-upload-utility.jar \
--url https://<tenant>.api.identitynow.com \
--clientId <your-client-id> \
--clientSecret <your-client-secret> \
--file /path/to/csv/files/ \
--recursive

Files must be named with the source ID prefix: <sourceId>-<description>.csv

See file-upload-utility/README.md for full documentation.