Skip to main content

Export Pricing and Lock

This page covers how to set a scenario from your pricing result, lock the loan, push the pricing information back to LQB, and retrieve the available next actions. These steps follow after you have priced a loan.


Step 3: Set Scenario From Pricing Result

Export the selected pricing result as a scenario on the price quote. This prepares the price quote for locking.

Endpoint: POST /rest/v1/lp-ppe-api/price-quote/setScenarioFromResult/EllieMaeQuoteRequest

Headers:

HeaderValue
AuthorizationBearer {{accessToken}}

Body:

{
"priceQuoteId": "{{priceQuoteId}}",
"search": {},
"lineResult": {}
}
FieldDescription
priceQuoteIdThe id from step 1 (getPriceQuoteFromLosLoanId response)
searchThe full search object (or baseSearch) from step 2
lineResultThe selected pricing line result from step 2's response

Response:

{
"id": "65a1b2c3d4e5f6a7b8c9d061",
"createdBy": "username",
"creationDate": "2026-03-31T18:37:26Z",
"modifiedDate": "2026-03-31T18:37:30Z",
"genTk": "65a1b2c3d4e5f6a7b8c9d060",
"search": {},
"pricingScenarioForQuoteRequest": {},
"pricingScenarioForBuyRequest": {},
"conversionLog": {
"version": 3,
"lockEventFeesAdded": false
},
"hedging": false
}

Step 4: Lock With Scenario

Lock the price quote with the selected scenario. This places a lock (or lock request, depending on the locking policy) on the price quote.

Prerequisite

Make sure your user is assigned to a Lock Policy within a User Group Workflow before calling this endpoint. Without this, the lock will fail.

Endpoint: POST /rest/v1/lp-ppe-api/price-quote/lockWithScenario

Headers:

HeaderValue
AuthorizationBearer {{accessToken}}

Body:

{
"priceQuoteId": "{{priceQuoteId}}",
"search": {},
"lineResult": {},
"exportAndLock": false,
"impersonateUserId": "{{userId}}",
"overrideSetting": {
"relock": { "relockFee": null },
"extension": { "extensionFee": null },
"concession": { "concessionFee": null }
},
"timezone": "America/Los_Angeles"
}
FieldDescription
priceQuoteIdThe price quote ID from step 1
searchThe full search object from step 2
lineResultThe selected pricing line result from step 2
exportAndLockSet to false for standard lock flow
impersonateUserIdThe user ID to lock on behalf of
overrideSettingFee overrides for relock, extension, and concession (null = use company defaults)
timezoneIANA timezone string (e.g. America/Los_Angeles)

Response:

The response contains the full price quote with the lock details under currentLock:

{
"id": "65a1b2c3d4e5f6a7b8c9d001",
"companyId": "65a1b2c3d4e5f6a7b8c9d010",
"name": "Test1",
"integrationRef": {
"LQB": "65a1b2c3d4e5f6a7b8c9d001"
},
"currentLock": {
"id": "65a1b2c3d4e5f6a7b8c9d002",
"priceQuoteId": "65a1b2c3d4e5f6a7b8c9d001",
"lockExpirationDateMarker": "2025-03-20T19:05:21.710Z",
"lastStatus": {},
"lockEvents": [
{
"id": "65a1b2c3d4e5f6a7b8c9d003",
"scenario": {},
"status": {},
"lockId": "65a1b2c3d4e5f6a7b8c9d002",
"userId": "65a1b2c3d4e5f6a7b8c9d011",
"overrideSetting": {}
}
]
}
}

Save the following values from the response — you'll need them for all subsequent operations:

ValueWhere to find it
lockIdcurrentLock.id
lockEventIdcurrentLock.lockEvents[last].id (always use the last element in the array)
scenariocurrentLock.lockEvents[last].scenario
info

currentLock.lockEvents is an array that grows with each lock action. Always use the last element to get the most recent event ID and scenario.


Step 5: Push Pricing Information to LQB

After locking, push the pricing information back to LQB. This syncs the locked pricing data from Lender Price to the LQB loan record.

Endpoint: PUT /rest/v1/integration/ellie/loan/updateloan/{{priceQuoteId}}/parsetype/pricing

Headers:

HeaderValue
AuthorizationBearer {{accessToken}}

Body:

{
"overrideSetting": {
"relock": {
"relockFee": null
},
"extension": {
"extensionFee": null
},
"concession": {
"concessionFee": null
}
}
}

Set fee values to null to use company defaults, or provide specific values to override.

Response:

{
"message": "Success"
}

Step 6: Get Next Lock Status

Retrieve the available actions the user can take based on the current lock state and the company's locking policy.

Endpoint: GET /rest/v1/lp-ppe-api/price-quote/getNextLockStatus/{{lockId}}/{{lockEventId}}

Headers:

HeaderValue
AuthorizationBearer {{accessToken}}

Path Parameters:

ParameterDescription
lockIdcurrentLock.id from the Lock With Scenario response
lockEventIdcurrentLock.lockEvents[last].id from the Lock With Scenario response

Response:

Returns an array of status objects representing available actions:

[
{
"id": "65a1b2c3d4e5f6a7b8c9d030",
"code": "Priced",
"buttonName": "Price",
"lockStatusLogic": "Other",
"requireReprice": false,
"worseCase": false
},
{
"id": "65a1b2c3d4e5f6a7b8c9d031",
"code": "Lock Requested",
"buttonName": "Request Lock",
"lockStatusLogic": "Requested",
"requireReprice": true,
"autoStatusLockStatusId": "65a1b2c3d4e5f6a7b8c9d032"
}
]

How to Find the Right Status

Each post-lock operation requires a specific lockStatusId. Use the table below to identify which status to pick from the response:

ActionHow to identify the correct status
Request LocklockStatusLogic == "Requested"
Approve LocklockStatusLogic == "Locked"
Deny LocklockStatusLogic == "Rejected"
Extension RequestlockExtender.enable == true and lockExtender.type == "Request"
Approve ExtensionlockExtender.enable == true and lockExtender.type == "Response"
Price ConcessionlockException.enable == true and lockException.requestType == "Request"
Approve ConcessionlockException.enable == true and lockException.requestType == "Grant"
Cancel LocklockStatusLogic == "CanceledOrWithdrawn"

Use the id of the matching status as the lockStatusId when calling addLockEvent in the Post-Lock Operations page.