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.