Why use prequalification?
All products at once
Returns maximum affordability across all products in a single call, rather
than requiring separate calculations per product.
Guideline-aware
Validates against all encoded guidelines and pricing rules, ensuring
accurate qualification estimates.
Minimal input
Requires only 8 pieces of information to get comprehensive affordability
results.
Real-time pricing
Uses live rates and guidelines at the time of calculation, not static
assumptions.
How it works
Prequalification is an asynchronous operation. When you create a prequalification request, it returns a job ID that you must poll to get the results.1
Create prequalification
Submit a mutation with borrower information to create a prequalification
job.
2
Receive job ID
The mutation returns a job ID that you’ll use to poll for results.
3
Poll for completion
Poll the prequalification query endpoint until the job status indicates
completion.
4
Retrieve results
Once complete, fetch the results showing maximum affordability across all
eligible products.
Creating a prequalification
To create a prequalification, you need 8 pieces of information:Required input fields
| Field | Type | Description |
|---|---|---|
monthlyIncome | Float! | Borrower’s total monthly income |
monthlyDebt | Float! | Borrower’s total monthly debt payments |
fipsCountyCode | String! | Five-digit FIPS county code for the property location |
propertyUsageType | PropertyUsageType! | PRIMARY_RESIDENCE, SECOND_HOME, or INVESTMENT |
neighborhoodHousingType | NeighborhoodHousingType! | Property type (e.g., SINGLE_FAMILY, CONDOMINIUM) |
isFirstTimeHomeBuyer | Boolean! | Whether the borrower is a first-time homebuyer |
isBorrowerSelfEmployed | Boolean! | Whether the borrower is self-employed |
Optional input fields
| Field | Type | Description |
|---|---|---|
qualifyingFicoScore | Int | FICO score for qualification (if not provided, results may vary by score range) |
Response
The mutation returns a job ID:Save the
id from the response. You’ll use it to poll for results.Polling for results
After creating a prequalification, poll the query endpoint to check the job status and retrieve results:Job status
Thestatus field indicates the current state of the prequalification:
| Status | Description | Action |
|---|---|---|
PENDING | Job is queued and processing | Continue polling |
COMPLETED | Calculation finished successfully | Read result field |
FAILED | Calculation encountered an error | Read error field |
CANCELLED | Job was cancelled | No results available |
Polling strategy
Implement exponential backoff when polling to avoid excessive API calls:Understanding results
When the prequalification completes, theresult field contains maximum affordability information:
Result fields
| Field | Description |
|---|---|
maxLoanAmount | Maximum loan amount across all eligible products |
maxPurchasePrice | Maximum purchase price (loan amount + down payment) |
maxMonthlyPayment | Maximum monthly payment the borrower can afford |
products | Array of results per product, showing maximums for each eligible product |
The top-level
maxLoanAmount, maxPurchasePrice, and maxMonthlyPayment
represent the highest values across all products. Use the products array to
show borrowers product-specific maximums.Complete example
Here’s a complete TypeScript example that creates a prequalification and polls for results:Best practices
-
Handle errors gracefully: Check the
errorfield when status isFAILEDand provide meaningful messages to borrowers. - Set reasonable timeouts: Most prequalifications complete within 30 seconds, but set a maximum timeout (e.g., 2-3 minutes) to avoid indefinite polling.
- Cache results: Prequalification results are valid for a period of time. Consider caching results with the input parameters as a key to avoid redundant calculations.
- Show product breakdown: Display results per product so borrowers can see which products offer the highest affordability.
- Explain limitations: Help borrowers understand that prequalification is an estimate and actual qualification may vary based on complete application details.
- Use for lead qualification: Prequalification is perfect for initial borrower conversations to quickly assess affordability before creating a full loan application.
Error handling
Common error scenarios and how to handle them:| Error Code | Description | Resolution |
|---|---|---|
INVALID_INPUT | One or more input fields are invalid | Validate inputs before submission |
GUIDELINE_VIOLATION | Borrower doesn’t meet minimum guidelines | Explain qualification requirements to borrower |
RATE_UNAVAILABLE | No rates available for the given parameters | Try adjusting inputs or explain market conditions |
TIMEOUT | Calculation took too long | Retry the prequalification request |
Related resources
- Pricing Scenarios - Show detailed pricing options for specific loan amounts
- Tracking Loan Updates - Learn how to poll for asynchronous job status
- Marketing Rates - Display competitive rates on your website