Skip to main content

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:

  1. Check lock desk hour to ensure the request will be accepted.
  2. Check rate status to ensure the rate is still active.
  3. Add request lock event using the addLockEvent call.

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:

HeaderValue
secret{{token}}
companyid{{companyId}}

Path Parameters:

  • {lockId} -- the lockId from the lock
  • {statusId} -- the current statusId
note

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:

  • lockSaturday
  • lockSunday
  • lockTimeLockedToSpecificTimeZone
  • lockTimeRanges
  • lockedTimeZone

Check Rate Status

Confirm the rate is still active before requesting a lock.

Endpoint: GET /rest/v1/lp-ppe-api/isRatePeriodStillActive/{{priceQuoteId}}/{{statusId}}

Headers:

HeaderValue
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:

HeaderValue
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.

  1. Check lock desk hour
  2. Check rate status
  3. 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:

HeaderValue
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, or Rate.
  • exceptionValueType: One of Points or Amount.
  • requestType: One of Request or Reason. 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:

HeaderValue
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:

HeaderValue
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:

  1. Check lock desk hour
  2. Get pricer config
  3. Get price quote search data
  4. Get new pricing
  5. Export pricing (set scenario from result)
  6. Add request lock event (reprice)

Step 1: Check Lock Desk Hour

Endpoint: GET /rest/v1/lp-ppe-api/checkLockStatus/{{lockId}}/{{statusId}}

Headers:

HeaderValue
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:

HeaderValue
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:

HeaderValue
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:

HeaderValue
AuthorizationBearer {{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:

HeaderValue
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:

HeaderValue
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:

  1. Check lock desk hour
  2. Check extension day availability
  3. Check rate period
  4. Add request lock event (extension)

Step 1: Check Lock Desk Hour

Endpoint: GET /rest/v1/lp-ppe-api/checkLockStatus/{{lockId}}/{{statusId}}

Headers:

HeaderValue
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:

HeaderValue
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:

HeaderValue
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:

HeaderValue
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:

HeaderValue
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:

  1. Check lock desk hour
  2. Check rate period
  3. Add request lock event (price concession)

Step 1: Check Lock Desk Hour

Endpoint: GET /rest/v1/lp-ppe-api/checkLockStatus/{{lockId}}/{{statusId}}

Headers:

HeaderValue
secret{{token}}
companyid{{companyId}}

Step 2: Check Rate Period

Endpoint: GET /rest/v1/lp-ppe-api/isRatePeriodStillActive/{{priceQuoteId}}/{{statusId}}

Headers:

HeaderValue
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:

HeaderValue
secret{{token}}
companyid{{companyId}}

Body:

Within the body, enter details as lockEventExceptionInfo:

  • exceptionType: One of Fee, Price, or Rate.
  • exceptionValueType: One of Points or Amount.
  • requestType: One of Request or Reason. 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:

HeaderValue
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:

HeaderValue
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.