Post-Lock Operations
After a loan has been locked, several operations are available. The specific operations depend on the lender company's locking policy -- use Get Next Possible Status to see which actions are available at any point.
Lock Request (Simple)
A lock request uses the addLockEvent call. It consists of three steps:
- Check lock desk hour to ensure the request will be accepted.
- Check rate status to ensure the rate is still active.
- Add request lock event using the
addLockEventcall.
Check Lock Desk Hour
Loan providers have operating hours where lock requests can be entered. These operating hours are referred to as desk hours, and they differ based on the loan provider. Before entering a lock request, first confirm that the request is being made during the loan provider's desk hours.
Endpoint: GET /rest/v1/lp-ppe-api/checkLockStatus/{{lockId}}/{{statusId}}
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Path Parameters:
{lockId}-- the lockId from the lock{statusId}-- the current statusId
If you are making this check after the statusId has been altered by other actions, be sure to provide the current statusId.
Response:
Returns the lock status including desk hours. The relevant fields are listed under lockExemptDates:
lockSaturdaylockSundaylockTimeLockedToSpecificTimeZonelockTimeRangeslockedTimeZone
Check Rate Status
Confirm the rate is still active before requesting a lock.
Endpoint: GET /rest/v1/lp-ppe-api/isRatePeriodStillActive/{{priceQuoteId}}/{{statusId}}
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Response: Returns a boolean (true/false) indicating if the rate period is still active.
Add Request Lock Event
Submit the lock request using the addLockEvent call.
Endpoint: POST /rest/v1/lp-ppe-api/price-quote/addLockEvent
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Body:
{
lockId: ObjectId;
lockStatusId: ObjectId;
priceQuoteId: ObjectId;
lockEventExceptionInfo: LockEventExceptionInfo;
lockEventExtensionInfo: LockEventExtensionInfo;
scenario: ScenarioLock;
lockDateUpdate: Date;
lockEventComment: String;
}
Example Request:
curl --location -g --request POST '{{protocol}}{{domain}}/rest/v1/lock/addLockEvent' \
--header 'secret: {{token}}' \
--header 'companyid: {{companyId}}' \
--data-raw '{
"lockId": "{{lockId}}",
"lockStatusId": "{{lockStatusId}}",
"priceQuoteId": "{{priceQuoteId}}",
"lockEventExceptionInfo": null,
"lockEventExtensionInfo": null
}'
Response: Returns the lock data and any modification data.
Lock Request With Price Concession
A lock request with price concession follows the same three steps as a simple lock request, but includes exception details in the body.
- Check lock desk hour
- Check rate status
- Add request lock event with the price concession in the body
Add Request Lock Event (With Price Concession)
The price concession is passed in the lockEventExceptionInfo object.
Endpoint: POST /rest/v1/lp-ppe-api/price-quote/addLockEvent
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Body:
Within the body, enter your details as lockEventExceptionInfo. The relevant options are:
- exceptionType: The type of concession. One of:
Fee,Price, orRate. - exceptionValueType: One of
PointsorAmount. - requestType: One of
RequestorReason. Enter"Request"in this case. - reason: A reason for the concession (string).
- values: A numerical value for the fee, price, or rate (double).
Example Request:
curl --location -g --request POST '{{protocol}}{{domain}}/rest/v1/lock/addLockEvent' \
--header 'secret: {{token}}' \
--header 'companyid: {{companyId}}' \
--data-raw '{
"lockId": "{{lockId}}",
"lockStatusId": "{{lockStatusId}}",
"priceQuoteId": "{{priceQuoteId}}",
"lockEventExceptionInfo": {
"exceptionType": "Rate",
"exceptionValueType": "Points",
"requestType": "Request",
"reason": "First-time buyer discount",
"values": "2.5"
}
}'
Response: There is no response body.
Deny Lock Request
To deny a lock request, create a lock event with the lockStatusLogic set to "Cancelled".
Endpoint: POST /rest/v1/lp-ppe-api/price-quote/addLockEvent
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Body:
{
"lockId": "{{lockId}}",
"lockStatusId": "{{lockStatusId}}",
"priceQuoteId": "{{priceQuoteId}}",
"lockEventExceptionInfo": null,
"lockEventExtensionInfo": null,
"scenario": "ScenarioLock",
"lockDateUpdate": "Date",
"lockEventComment": "String",
"lockStatusLogic": "Cancelled"
}
Response: There is no body response to this call.
Approve Lock Request
To approve a lock request, create a lock event with the lockStatusLogic set to "Approved".
Endpoint: POST /rest/v1/lp-ppe-api/price-quote/addLockEvent
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Body:
{
"lockId": "{{lockId}}",
"lockStatusId": "{{lockStatusId}}",
"priceQuoteId": "{{priceQuoteId}}",
"lockEventExceptionInfo": null,
"lockEventExtensionInfo": null,
"scenario": "ScenarioLock",
"lockDateUpdate": "Date",
"lockEventComment": "String",
"lockStatusLogic": "Approved"
}
Response: There is no body response to this call.
Reprice
Repricing changes a loan's price and relocks with the new price. The reprice workflow consists of six steps:
- Check lock desk hour
- Get pricer config
- Get price quote search data
- Get new pricing
- Export pricing (set scenario from result)
- Add request lock event (reprice)
Step 1: Check Lock Desk Hour
Endpoint: GET /rest/v1/lp-ppe-api/checkLockStatus/{{lockId}}/{{statusId}}
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Step 2: Get Pricer Config
Retrieve the pricer configuration for the loan.
Endpoint: GET /rest/lp-config/pricing-config/loanPricer
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Step 3: Get Price Quote Search Data
Retrieve the current price quote's search data to use for repricing.
Endpoint: GET /rest/integration/ellie/getSearch/{{priceQuoteId}}
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Step 4: Get New Pricing
Search for new pricing using the search data from Step 3.
Endpoint: POST /rest/v1/lp-ppe-api/pricing/search?userIdToUse={{userId}}
Headers:
| Header | Value |
|---|---|
| Authorization | Bearer {{accessToken}} |
Use the search criteria from the price quote with updated parameters as needed.
Step 5: Export Pricing
Set the new scenario from the repricing result.
Endpoint: POST /rest/v1/lp-ppe-api/price-quote/setScenarioFromResult/EllieMaeBuyRequest
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Step 6: Add Request Lock Event (Reprice)
Submit the reprice lock event.
Endpoint: POST /rest/v1/lp-ppe-api/price-quote/addLockEvent
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Body:
{
lockId: ObjectId;
lockStatusId: ObjectId;
priceQuoteId: ObjectId;
lockEventExceptionInfo: LockEventExceptionInfo;
lockEventExtensionInfo: LockEventExtensionInfo;
scenario: ScenarioLock;
lockDateUpdate: Date;
lockEventComment: String;
}
Response: Returns the lock data and any modification data.
Extension Request
Request a lock extension before the lock expires. The extension workflow consists of four steps:
- Check lock desk hour
- Check extension day availability
- Check rate period
- Add request lock event (extension)
Step 1: Check Lock Desk Hour
Endpoint: GET /rest/v1/lp-ppe-api/checkLockStatus/{{lockId}}/{{statusId}}
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Step 2: Check Extension Day Availability
Verify the lock is extendable to the desired date.
Endpoint: GET /rest/v1/lp-ppe-api/getEstimatedExpirationDate/{{priceQuoteId}}/{{days}}
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Step 3: Check Rate Period
Ensure the rate is still active.
Endpoint: GET /rest/v1/lp-ppe-api/isRatePeriodStillActive/{{priceQuoteId}}/{{statusId}}
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Step 4: Add Request Lock Event (Extension)
Create a LockEventExtensionInfo object with extension details and submit.
Endpoint: POST /rest/v1/lp-ppe-api/price-quote/addLockEvent
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Body:
{
"lockId": "{{lockId}}",
"lockStatusId": "{{lockStatusId}}",
"priceQuoteId": "{{priceQuoteId}}",
"lockEventExceptionInfo": null,
"lockEventExtensionInfo": {
"lockExtender": { ... }
},
"scenario": "ScenarioLock",
"lockDateUpdate": "Date",
"lockEventComment": "String"
}
Response: Returns the lock data and any modification data.
Approve Extension
Approve an extension request that has been made for a lock.
Endpoint: POST /rest/v1/lp-ppe-api/price-quote/addLockEvent
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Body:
{
"lockId": "{{lockId}}",
"lockStatusId": "{{lockStatusId}}",
"priceQuoteId": "{{priceQuoteId}}",
"lockEventExceptionInfo": null,
"lockEventExtensionInfo": null,
"scenario": "ScenarioLock",
"lockDateUpdate": "Date",
"lockEventComment": "String",
"lockStatusLogic": "Approved"
}
Response: There is no body response to this call.
Request Post-Lock Price Concession
Request a price concession after the loan has been locked. The workflow consists of three steps:
- Check lock desk hour
- Check rate period
- Add request lock event (price concession)
Step 1: Check Lock Desk Hour
Endpoint: GET /rest/v1/lp-ppe-api/checkLockStatus/{{lockId}}/{{statusId}}
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Step 2: Check Rate Period
Endpoint: GET /rest/v1/lp-ppe-api/isRatePeriodStillActive/{{priceQuoteId}}/{{statusId}}
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Step 3: Add Request Lock Event (Price Concession)
Submit the post-lock price concession using lockEventExceptionInfo.
Endpoint: POST /rest/v1/lp-ppe-api/price-quote/addLockEvent
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Body:
Within the body, enter details as lockEventExceptionInfo:
- exceptionType: One of
Fee,Price, orRate. - exceptionValueType: One of
PointsorAmount. - requestType: One of
RequestorReason. Enter"Request"in this case. - reason: A reason for the concession (string).
- values: A numerical value for the fee, price, or rate (double).
Example Request:
curl --location -g --request POST '{{protocol}}{{domain}}/rest/v1/lock/addLockEvent' \
--header 'secret: {{token}}' \
--header 'companyid: {{companyId}}' \
--data-raw '{
"lockId": "{{lockId}}",
"lockStatusId": "{{lockStatusId}}",
"priceQuoteId": "{{priceQuoteId}}",
"lockEventExceptionInfo": {
"exceptionType": "Rate",
"exceptionValueType": "Points",
"requestType": "Request",
"reason": "First-time buyer discount",
"values": "2.5"
}
}'
Response: There is no response body.
Cancel Lock
Remove a lock on a loan.
Endpoint: POST /rest/v1/lp-ppe-api/price-quote/addLockEvent
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Body:
{
lockId: ObjectId;
lockStatusId: ObjectId;
priceQuoteId: ObjectId;
lockEventExceptionInfo: LockEventExceptionInfo;
lockEventExtensionInfo: LockEventExtensionInfo;
scenario: ScenarioLock;
lockDateUpdate: Date;
lockEventComment: String;
}
Example Request:
curl --location -g --request POST '{{protocol}}{{domain}}/rest/v1/lock/addLockEvent' \
--header 'secret: {{token}}' \
--header 'companyid: {{companyId}}' \
--data-raw '{
"lockId": "{{lockId}}",
"lockStatusId": "{{lockStatusId}}",
"priceQuoteId": "{{priceQuoteId}}",
"lockEventExceptionInfo": null,
"lockEventExtensionInfo": null
}'
Response: Returns the lock data and any modification data.
Allow Current Pricing
Allow current pricing on a locked loan.
Endpoint: POST /rest/v1/lp-ppe-api/price-quote/addLockEvent
Headers:
| Header | Value |
|---|---|
| secret | {{token}} |
| companyid | {{companyId}} |
Body:
Pass the standard lock IDs along with a scenario lock, any exception or extension data if applicable, the date, and a comment.
Response: Returns the lock data and any modification data.