Importing into LoanPro via API
Learn how to format, validate, and import CSV files using the API.
LoanPro's import endpoints allow you to upload and ingest CSV files programmatically. Using a multi-endpoint workflow, you can create new loan accounts, update existing records, and validate bulk data before writing it to your tenant.
In this guide, you will learn which base URL to use and how to navigate the seven-step import lifecycle.
Base URL & API key
The base URL that should be used is tenant-specific for Virtual Private Cloud (VPC) clients.
- SaaS Clients: Use LoanPro’s multi-tenant URL (https://loanpro.simnang.com/api/public/api/1/).
- VPC Clients: Use your unique, tenant-specific URL.
To use your API key for data imports, you need to first log in to LoanPro and accept the consent prompt. Once completed, your key will be fully activated and ready for API requests. If you do not log in and accept the prompt, your CSV import will not advance past the validation process.
Endpoints
Each step in the import lifecycle has a unique endpoint associated with it. The respective endpoint must be used with the base URL.
| Step | Endpoint | Method |
|---|---|---|
| 1. Create data import record | /data/import/upload/{importType} | POST |
| 2. Upload CSV File | {d.url} | PUT |
| 3. Get import progress | /data/import/details/{importType}({id}) | GET |
| 4. Validate CSV file | /data/import/validate/{importType}({id}) | POST |
| 5. Get import validation/errors | /odata.svc/DataImport({id}) | GET |
| 6. Import validated data | /data/import/{importType}({id}) | POST |
| 7. Verify imported data records | /data/import/verify/{importType}({id}) | POST |
The process
There are seven required steps to create and complete a CSV data import. These steps must be followed in order to ensure that your data is properly validated and successfully processed into the system. Each step has corresponding API documentation except for step two: Upload CSV file.
Note: This process only supports loan data. You cannot import or create line of credit data using these endpoints.
Step 1: Create data import record
Creating a data import record is the first step in the CSV import process. To create an import record, the following parameters are required:
- importType: The type of data being imported.
- fileName: The name of the CSV file you are importing.
There are 43 available import types—all of which are listed in LoanPro’s API documentation.
It is best practice to set the optional validationType body parameter. You have two options:
1. lineRejection: Rejects only the specific row(s) that fail validation but successfully processes the rest of the file.
2. fileRejection: Rejects the entire file if a single row fails.
If this body parameter is omitted, it will default to fileRejection.
Need a blueprint? Review our import examples.
Step 2: Upload CSV file
Once you successfully create a data import record, the response payload will include:
- d.url – A presigned S3 URL.
You must use that URL to upload your CSV file within 45 minutes of it being issued. Otherwise, it will expire, and you will have to do step one again. When making this API call, the request body should only contain raw CSV bytes. Any other format will cause the upload or file validation to fail.
Step 3: Get import progress
With this call, you can monitor the stage-by-stage progress for your CSV file import.
Note: This endpoint does not surface validation errors—you must use the OData entity to view validation error details. However, this is the only endpoint that returns usable presigned URLs for downloading the cover sheet and rejection file. You will need to use both endpoints
Step 4: Validate CSV file
You must always validate the structure and content of your uploaded CSV file against LoanPro's required schema before importing it. Calling the /data/import/validate/{importType}({id}) endpoint triggers an asynchronous validation process that evaluates the file using the validationType configured in step one.
Step 5: Get import validation/errors
Query the OData endpoint to view detailed validation results and inspect any errors or rejections found. When making requests to this endpoint, keep the following technical requirements and limitations in mind:
- Error Text: This is the only place where validation error text appears.
- Supported Request Format: Only single-entity reads (fetching one record at a time by its unique ID) are supported.
- OData Parameter Restrictions: Standard system queries are disabled for API keys and will fail.
- $metadata and $top return a 401 “Unauthorized” error.
- $count returns a 409 “No route found…” error.
Step 6: Import validated data (ingest)
Once your CSV file passes validation, you need to process and save the validated rows. The import status must be dataimport.status.validated before calling this endpoint. If you attempt to ingest before validation completes, you will get a 409 error.
You must explicitly call this endpoint to begin ingestion, regardless of whether importProgression was set to manual or automatic in step one. Keep the following operational rules and status behaviors in mind when executing this request:
- Expected Response: A successful call will return a 200 response with an empty body.
- Confirm Ingestion: Look for the status to change to dataimport.status.imported. The system can reach that status even if errors occurred during ingestion, so check statsNew and statsErr via the OData endpoint to confirm how many rows successfully imported versus failed during ingestion.
Step 7: Verify imported records
In this final step, confirm that you created or updated the CSV file successfully by reviewing the import summary and results payload. Review these status requirements and endpoint behaviors when executing this call:
- Status Prerequisite: The import status must be dataimport.status.imported before calling this endpoint. Attempting to verify earlier returns a 409 error.
- Expected Response: A successful request returns a 200 response with an empty body.
- Verification Behavior: Do not rely on dataimport.status.completed as confirmation of success. Certain import types like Customers and LoanSetup can stall in verifinprogress, so always confirm success by checking that statsErr is 0 and statsNew matches your expected row count via the OData endpoint.
What's next
View our detailed API documentation to see step-by-step request payloads, schema specifications, and field-level definitions.