Lender API
Lender Introduction
Welcome to the Lender API! You can use our API to access Reggora endpoints which get information on your products, loans, orders, submissions, your users, and vendors.
You can view code examples in the dark area to the right. If you are using the development environment then you will need to use the base url:
https://sandbox.reggora.io/lender/
Lender Authentication
To authorize, use this code:
import requests
# The login request does not require the integration API key
response = requests.post('https://sandbox.reggora.io/lender/auth', body={'username': 'username/email', 'password': 'password'})
Make sure to replace
username/email
andpassword
with your Reggora Lender Portal login information.
The Reggora API uses JWT bearer tokens as well as a personal API key to authorize all requests.
The Reggora API expects for your API integration key as well as the JWT bearer token to be included in all API requests to the server in a header that looks like the following:
Authorization: Bearer {token}
integration: {api-integration-key}
If making requests to the development server, you will need to use your development specific credentials and development specific API key.
Loans
Get All Loans
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# Just an example
query_params = {
'offset': 0,
'limit': 10,
'ordering': '-created',
}
response = requests.get('https://sandbox.reggora.io/lender/loans', params=query_params, headers=headers)
The above command returns JSON structured like this:
{
"data": {
"loans": [
{
"id": "5c33c6b1681f110034effc72",
"loan_number": "1002918281901",
"loan_officer": {
"id": "5b5b19d3c643b3000f8f2857",
"email": "hello@world.com",
"phone_number": "555-444-1234",
"firstname": "John",
"lastname": "Doe"
},
"appraisal_type": "Refinance",
"due_date": "2018-12-19 12:00:00",
"created": "2019-01-07 21:37:53.938000",
"updated": "2019-01-07 21:37:53.938000",
"related_order": "5c33c716681f111134effc73",
"subject_property_address": "100 Mass Ave",
"subject_property_city": "Boston",
"subject_property_state": "MA",
"subject_property_zip": "02192",
"case_number": "10029MA",
"loan_type": "FHA",
"matched_products": ["5b5b19d3c643b3000f8f2859"],
"consumers": [{
"id": "5c33c716681f110034effc73",
"full_name": "John Smith",
"role": "borrower",
"email": "john@reggora.com",
"home_phone": "999-999-9999",
"work_phone": "999-999-9999",
"cell_phone": "999-999-9999",
"is_primary_contact": true
}]
},
// ...9 more
]
},
"status": 200
}
This endpoint retrieves all loans, and can take a number of query parameters.
HTTP Request
GET https://sandbox.reggora.io/lender/loans
Query Parameters
Parameter | Default | Description |
---|---|---|
offset | 0 | Number of loans to skip before list gets returned (Used in pagination). |
limit | 0 | Limit of loans to return (If set to 0 there is no limit). |
ordering | -created | The field to order loans by. |
loan_officer | None | ID of loan officer to filter loans by. |
Get Loan
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/loan/<loan_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"loan": {
"id": "5c33c716681f110034effc73",
"loan_number": "1",
"loan_officer": {
"id": "5b5b19d3c643b3000f8f2857",
"email": "hello@world.com",
"phone_number": "555-444-1234",
"firstname": "John",
"lastname": "Doe"
},
"appraisal_type": "Refinance",
"due_date": "2018-12-19 12:00:00",
"created": "2019-01-07 21:39:34.018000",
"updated": "2019-01-07 21:39:34.018000",
"related_order": "5c33c716681f111134effc73",
"subject_property_address": "100 Mass Ave",
"subject_property_city": "Boston",
"subject_property_state": "MA",
"subject_property_zip": "02192",
"case_number": "10029MA",
"loan_type": "FHA",
"matched_products": ["5b5b19d3c643b3000f8f2859"],
"consumers": [{
"id": "5c33c716681f110034effc73",
"full_name": "John Smith",
"role": "borrower",
"email": "john@reggora.com",
"home_phone": "999-999-9999",
"work_phone": "999-999-9999",
"cell_phone": "999-999-9999",
"is_primary_contact": true
}]
}
},
"status": 200
}
This endpoint retrieves a specific loan by id.
HTTP Request
GET https://sandbox.reggora.io/lender/loan/<loan_id>
URL Parameters
Parameter | Description |
---|---|
loan_id | The ID of the loan. |
Query Parameters
Parameter | Default | Description |
---|---|---|
additional | false | Inclusion of additional property data. |
Delete Loan
import requests
response = requests.delete('https://sandbox.reggora.io/lender/loan/<loan_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": "Loan deleted.",
"status": 200
}
This endpoint deletes a specific loan.
HTTP Request
DELETE https://sandbox.reggora.io/lender/loan/<loan_id>
URL Parameters
Parameter | Description |
---|---|
loan_id | The ID of the loan. |
Create a Loan (Basic)
This endpoint creates a loan and returns the ID of the created loan. This does not support custom fields or a custom schema.
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
"loan_number": "2",
"loan_officer": "5b5b19d3c643b3000f8f2857",
"appraisal_type": "Refinance",
"due_date": "2018-12-19T12:00:00Z",
"subject_property_address": "100 Mass Ave",
"subject_property_city": "Boston",
"subject_property_state": "MA",
"subject_property_zip": "02192",
"case_number": "10029MA",
"loan_type": "FHA"
}
response = requests.post('https://sandbox.reggora.io/lender/loan', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c33c716681f110034effc73",
"status": 200
}
HTTP Request
POST https://sandbox.reggora.io/lender/loan
Request Body Parameters
Parameter | Description | Required |
---|---|---|
loan_number | The unique loan identifier | True |
due_date | UTC formatted due date of the loan file (Using TZ formatting). | True |
appraisal_type | Appraisal Type (Refinance, Purchase, etc...) | True |
loan_officer | Id of the loan officer associated with this loan | False |
subject_property_address | Street address of loan | True |
subject_property_city | City of the loan | True |
subject_property_state | State of loan | True |
subject_property_zip | 5 digit zip code of the loan | True |
loan_type | Type of loan (FHA...) | False |
case_number | Case number | False |
Edit a Loan (Basic)
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
"due_date": "2018-12-20T12:00:00Z",
"case_number": "129MA",
}
response = requests.put('https://sandbox.reggora.io/lender/loan/<loan_id>', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c33c716681f110034effc73",
"status": 200
}
This endpoint edits a loan and returns the ID of the edited loan. Only the provided fields will be updated. This does not support custom fields or a custom schema.
HTTP Request
PUT https://sandbox.reggora.io/lender/loan/<loan_id>
URL Parameters
Parameter | Description | Required |
---|---|---|
loan_id | Id of the loan | True |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
loan_number | The unique loan identifier | False |
due_date | UTC formatted due date of the loan file (Using TZ formatting). | False |
appraisal_type | Appraisal Type (Refinance, Purchase, etc...) | False |
loan_officer | Id of the loan officer associated with this loan | False |
subject_property_address | Street address of loan | False |
subject_property_city | City of the loan | False |
subject_property_state | State of loan | False |
subject_property_zip | 5 digit zip code of the loan | False |
loan_type | Type of loan (FHA...) | False |
case_number | Case number | False |
Create a Loan (Extended)
This endpoint creates a loan using parameters that match the lender's loan schema and returns the ID of the created loan. This endpoint allows you to use a custom schema as well as custom fields that you set up in the Settings tab within the lender platform.
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# below is an example
# the keys in the loan params JSON should match the lender's loan schema
body = {
"loan":
{
"Loan Number":"12345",
"Borrower Name":"Michael Jordan",
"Subject Property City":"Boston",
"Subject Property State":"MA",
"Subject Property Address":"1 Main St.",
"Appraisal Due Date":"2/20/2020",
"Sellers Agent":"John Agent",
"Sellers Agent Phone":"5551112222",
"Sellers Agent E-mail":"sellersagent@gmail.com",
"ULDD Attachment Type":"Detached",
"Occupancy (P/S/I)":"Primary",
"Loan Type":"Conventional",
"Commit Due":"2/25/20"
}
}
response = requests.post('https://sandbox.reggora.io/lender/extended_loan', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c33c716681f110034effc73",
"status": 200
}
HTTP Request
POST https://sandbox.reggora.io/lender/extended_loan
Request Body Parameters
Parameter | Description | Required |
---|---|---|
loan | JSON object with keys that match the lender's loan schema. | True |
Edit a Loan (Extended)
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# below is an example
# the keys in the loan params JSON should match the lender's loan schema
body = {
"loan":
{
"Subject Property City":"Cambridge",
"Subject Property Address":"2 Main St."
}
}
response = requests.put('https://sandbox.reggora.io/lender/extended_loan/<loan_id>', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c33c716681f110034effc73",
"status": 200
}
This endpoint edits a loan using parameters that match the lender's loan schema and returns the ID of the edited loan. Only the provided fields will be updated.
HTTP Request
PUT https://sandbox.reggora.io/lender/extended_loan/<loan_id>
URL Parameters
Parameter | Description | Required |
---|---|---|
loan_id | Id of the loan | True |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
loan | JSON object with keys that match the lender's loan schema. | True |
Get Loan Schema (Extended)
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/extended_loan', headers=headers)
The above command returns JSON structured like this (actual field names will vary based on lender's loan schema):
{
"data": [
"Subject Property City",
"Subject Property State",
"Subject Property ZIP",
"Subject Property Address",
"Rush",
"Sellers Agent",
"Sellers Agent Phone",
"Commit Due",
"Seller Agnt Cell Phone",
"Borr Cell",
"Borr Home Phone",
"Borr Business Phone",
"Borr Email",
"Collect at Close",
"Borrower Name",
"Co-Borrower Name",
"Co-Borr Email",
"Loan Type",
"Loan Number",
"Branch Name",
"Occupancy (P/S/I)",
"Subject Property #Units",
"ULDD Attachment Type",
"Purchase Value",
"Expected Value"
],
"status": 200
}
This endpoint retrieves a lender's loan schema which can be used to create and edit extended loans. Extended loans support a custom schema defined in the Lender platform's settings tab as well as custom fields and metadata.
HTTP Request
GET https://sandbox.reggora.io/lender/extended_loan
Create Review Result
import requests
import json
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# Example review data
payload = json.dumps({
"review_data": {
"sample": 1
},
"cu_score": "1.2",
"lca_score": "2",
"case_id": "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx",
"order_id": "xxxxxxxx-xxxx-Mxxx-Nxxx-yyyyyyyyyyyy",
"reggora_order_id": "62ab53800000000000000000",
"reggora_loan_id": "62aaaac00000000000000000",
"ucdp_document_id": "10000A0000",
"ead_document_id": "A000010000",
})
response = requests.post('https://sandbox.reggora.io/lender/loan/<loan_id>/review',
headers=headers, data=payload)
The above command returns a JSON object representing the new external review result. You will need to store the id for future requests to fetch the full object or upload documents:
{
"data": {
"id": "6193c4ad9681550007a795c7",
"source": "clear_collateral",
"created": "2021-11-16 14:48:13.578000",
"order_id": "62ab53800000000000000000",
},
"status": 201
}
This endpoint creates an external review result for a loan. That result may then be used to store documents related to the review. Can have side effects on the order if reggora_order_id
is included.
HTTP Request
POST https://sandbox.reggora.io/lender/loan/<loan_id>/review
URL Parameters
Parameter | Description |
---|---|
loan_id | The Reggora ID of the loan that corresponds to this review. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
reggora_order_id | str ID of the Order in Reggora. The Order should correspond to the Loan. Include if the review result is specific to one Order. If included, the Order's most recent submission will be approved and the status will move from "Under Review" to "Submitted" | False |
reggora_loan_id | str ID of the Loan in Reggora. Should match loan_id URL param if included, but the URL param will take precedence. | False |
cu_score | If the review result includes results from Fannie Mae, include the CU Score. | False |
lca_score | If the review result includes results from Freddie Mac, include the LCA score. | False |
case_id | str ID used externally to identify this review case or the loan | False |
order_id | str ID used externally to identify the order for this review result | False |
ucdp_document_id | str ID used by UCDP for this loan | False |
ead_document_id | str ID used by EAD for this loan | False |
review_data | dict containing additional data from the review | False |
Get Review Result
import requests
import json
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/loan/<loan_id>/review',
headers=headers, data=payload)
The above command returns a list of the Loan's external_review_results including links to download the uploaded documents:
{
"data": [
{
"id": "6193c4ad9681550007a795c7",
"source": "external",
"created": "2021-11-16 14:48:13.578000",
"review_data": {
"sample": 1,
"cu_score": "1.2",
"lca_score": "2",
"case_id": "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx",
"order_id": "xxxxxxxx-xxxx-Mxxx-Nxxx-yyyyyyyyyyyy",
"reggora_order_id": "62ab53800000000000000000",
"reggora_loan_id": "62aaaac00000000000000000",
"ucdp_document_id": "10000A0000",
"ead_document_id": "A000010000",
},
"order_id": "62ab53800000000000000000",
"result": "https://sandbox.reggora.io/lender/review-evault/6193c4ad9681550007a795c7/result",
"fha_ssr": "https://sandbox.reggora.io/lender/review-evault/6193c4ad9681550007a795c7/fha_ssr",
"fannie_ssr": "https://sandbox.reggora.io/lender/review-evault/6193c4ad9681550007a795c7/fannie_ssr",
"freddie_ssr": "https://sandbox.reggora.io/lender/review-evault/6193c4ad9681550007a795c7/freddie_ssr",
}
],
"status": 201
}
This endpoint returns all external review data for the loan. Note that most of the optional params from the Create Review Result endpoint will be stored and returned as part of the review_data
object.
HTTP Request
GET https://sandbox.reggora.io/lender/loan/<loan_id>/review
Parameter | Description |
---|---|
loan_id | str ID of the Loan. Its external review results will be returned in the response. |
Upload External Review Document
import requests
import json
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# Example Uploading SSR from Fannie Mae
document_type = "fannie_ssr"
review_id = "6193c4ad9681550007a795c7"
files=[
('file',('<file_name>',open('<file_path>','rb'),'application/pdf'))
]
response = requests.post(f'https://sandbox.reggora.io/lender/review-evault/{review_id}/{document_type}',
headers=headers, data=payload, files=files)
The above command returns a JSON object representing the new review file:
{
"data": {
"document_id": "d74218e6-5788-11ec-9185-0242ac120002",
"document_name": "fannie_ssr.pdf",
"upload_datetime": "2021-12-07 18:09:38.024523"
},
"status": 201
}
This endpoint uploads a document to the review object on a loan. Be careful that your request body is form-data with a single key "file" corresponding to the File you are uploading. We flexibly support any "document_type" though certain values may impact how the file will be handled.
HTTP Request
POST https://sandbox.reggora.io/lender/review-evault/<review_id>/<document_type>
URL Parameters
Parameter | Description |
---|---|
review_id | ID for the review object. Was returned in the response to the initial request to Create Review Result, and can also be obtained from the Get Review Result endpoint. |
document_type | str name of the document being uploaded. All document types will be stored. There will be additional processing if the type is one of: “result”, “fannie_ssr”, “freddie_ssr”, or “ead_ssr”, so please use those values if they apply. |
Request Body Parameters
The request body must be form-data.
Parameter | Description | Required |
---|---|---|
file | The file that you are uploading. | True |
Get External Review Document
import requests
import json
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/review-evault/<review_id>/<document_type>',
headers=headers)
The above command returns a base64-encoded data stream of the extended Loan document's requested review file.
This endpoint fetches an uploaded document from the review object on a loan.
HTTP Request
GET https://sandbox.reggora.io/lender/review-evault/<review_id>/<document_type>
Parameter | Description |
---|---|
review_id | ID for the review object. Was returned in the response to the initial request to Create Review Result, and can also be obtained from the Get Review Result endpoint. |
document_type | Type of the document being fetched. |
Orders
Get All Orders
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# Just an example
query_params = {
'offset': 0,
'ordering': '-created',
'loan_officer': '5b5b19d3c643b3000f8f2857',
'filters': 'rush, behind_schedule'
}
response = requests.get('https://sandbox.reggora.io/lender/orders', params=query_params, headers=headers)
The above command returns JSON structured like this:
{
"data": {
"orders": [
{
"id": "5c1c05f532b211000e15302a",
"status": "Submitted",
"priority": "Normal",
"due_date": "2018-12-28 12:00:00",
"inspection_date": "2018-12-28 05:00:00",
"accepted_vendor": {
"id": "5b859eebc5a0c9004e38dd8e",
"firm_name": "__Alex's Test AMC Firm",
"accepting_jobs": true,
"company": "5b859eebc5a0c9004e38dd8d"
},
"conversation": "5c4f16764672bb00105ea5f9",
"contract_evault": "5c2e718cb61f76001adf9871",
"cu_score": "2.5",
"lca_score": "2.5",
"team_conversation": "5c4f16764672bb00105ea5f9",
"created": "2018-12-20 21:13:25.102000",
"allocation_mode": "manually",
"branch_identifier": "5db851297a6980000aa01206",
"requested_vendors": [
{
"id": "5b859eebc5a0c9004e38dd8e",
"firm_name": "__Alex's Test AMC Firm",
"accepting_jobs": true,
"company": "5b859eebc5a0c9004e38dd8d"
}
],
"inspection_complete": true,
"products": [
{
"id": "5b55d4c68d9472000fc432ef",
"product_name": "5000",
"amount": "7000.00"
}
],
"evault": "5c4f16764672bb00105ea5f9",
"loan_file": {
"id": "5b55d4c68d9472000fc432ab",
"loan_number": "10000030",
"subject_property_address": "100002 Sun Street",
"subject_property_city": "Brighton",
"subject_property_state": "MA",
"subject_property_zip": "02135"
},
"consumers": [{
"id": "5c33c716681f110034effc73",
"full_name": "John Smith",
"role": "borrower",
"email": "john@reggora.com",
"home_phone": "999-999-9999",
"work_phone": "999-999-9999",
"cell_phone": "999-999-9999",
"is_primary_contact": true
}],
"is_follow_up": true,
"primary_order": "60f06d1ad12db1051533adb0",
"follow_up_orders": [
"60f06d1cd12db1051533adb1",
"60f06d1cd12db1051533adb2"
],
"has_been_reassigned": false,
"active_order": "60f06d1cd12db1051533adb3",
},
// ...9 more
],
"count": 274
},
"status": 200
}
This endpoint retrieves all orders (limit 10 at a time). Can be filtered with query parameters.
HTTP Request
GET https://sandbox.reggora.io/lender/orders
Parameter | Default | Description |
---|---|---|
offset | 0 | Number of orders to skip before list gets returned (Used in pagination). |
ordering | -created | The field to order orders by. |
search | None | Currently not supported argument. |
loan_officer | None | ID of loan officer to filter orders by. |
due_in | None | A number of days until the order due_date. |
filter | '' | A comma separated list that can include keys words that will filter orders specific to the keywords used. Filter words are described in the table below. |
Filter Descriptions
Keyword | Description |
---|---|
rush | Gets all orders where priority is equal to "Rush". |
behind_schedule | Gets all orders where the due date has passed today, and the vendor has not submitted a report. Excludes canceled orders. |
due_soon | Gets all orders where the due date is in less than 2 days. |
Get Order
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/order/<order_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"order": {
"id": "5c2e718cb61f76001adf9871",
"status": "Inspection Scheduled",
"priority": "Rush",
"due_date": "2018-12-19 12:00:00",
"inspection_date": "2018-12-24 21:00:00",
"accepted_vendor": {
"id": "5b859eecc5a0c9004e38dd8f",
"firm_name": "__Alex's Test AMC Firm",
"accepting_jobs": true,
"company": "5b859eebc5a0c9004e38dd8d"
},
"created": "2019-01-03 20:33:16.748000",
"allocation_mode": "automatically",
"branch_identifier": "5db851297a6980000aa01206",
"requested_vendors": [],
"inspection_complete": false,
"conversation": "5c4f16764672bb00105ea5f9",
"team_conversation": "5c4f16764672bb00105ea5f9",
"evault": "5c4f16764672bb00105ea5f9",
"contract_evault": "5c2e718cb61f76001adf9871",
"cu_score": "2.5",
"lca_score": "2.5",
"products": [
{
"id": "5b55d4c68d9472000fc432ef",
"product_name": "Product #1",
"amount": "10.0"
}
],
"loan_file": {
"id": "5b55d4c68d9472000fc432ae",
"loan_number": "ABC",
"subject_property_address": "100 Brighton Ave",
"subject_property_city": "Boston",
"subject_property_state": "MA",
"subject_property_zip": "02135"
},
"consumers": [{
"id": "5c33c716681f110034effc73",
"full_name": "John Smith",
"role": "borrower",
"email": "john@reggora.com",
"home_phone": "999-999-9999",
"work_phone": "999-999-9999",
"cell_phone": "999-999-9999",
"is_primary_contact": true
}],
"is_follow_up": true,
"primary_order": "60f06d1ad12db1051533adb0",
"follow_up_orders": [
"60f06d1cd12db1051533adb1",
"60f06d1cd12db1051533adb2"
],
"has_been_reassigned": false,
"active_order": "60f06d1cd12db1051533adb3",
}
},
"status": 200
}
This endpoint retrieves a specific order by id.
HTTP Request
GET https://sandbox.reggora.io/lender/order/<order_id>
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Cancel Order
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.delete('https://sandbox.reggora.io/lender/order/<order_id>/cancel', headers=headers)
The above command returns JSON structured like this:
{
"data": "Order has been canceled.",
"status": 200
}
This endpoint cancels a specific order.
HTTP Request
DELETE https://sandbox.reggora.io/lender/order/<order_id>/cancel
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Create an Order
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# If allocation_type is manually
body = {
'allocation_type': 'manually',
'vendors': [
'5b55d4c68d9472000fc432ef',
'5b55d4c68d9472000fc432eg',
'5b55d4c68d9472000fc432eh'
],
'loan': '5c33c716681f110034effc73',
'priority': 'Rush',
'products': ['5b55d4c68d9472000fc432ef'],
'due_date': '2018-12-24T21:00:00Z',
'additional_fees': [
{
'description': 'Large yard',
'amount': '50'
},
{
'description': 'Outside regular locations',
'amount': '20'
}
]
}
# If allocation_type is automatically
body = {
'allocation_type': 'automatically',
'loan': '5c33c716681f110034effc73',
'priority': 'Rush',
'products': ['5b55d4c68d9472000fc432ef'],
'due_date': '2018-12-24T21:00:00Z',
'additional_fees': [
{
'description': 'Large yard',
'amount': '50'
},
{
'description': 'Outside regular locations',
'amount': '20'
}
]
}
# If order_request_method is broadcast
body = {
'allocation_type': 'automatically',
'order_request_method': 'broadcast',
'loan': '5c33c716681f110034effc73',
'priority': 'Rush',
'products': ['5b55d4c68d9472000fc432ef'],
'due_date': '2018-12-24T21:00:00Z',
'additional_fees': [
{
'description': 'Large yard',
'amount': '50'
},
{
'description': 'Outside regular locations',
'amount': '20'
}
]
}
response = requests.post('https://sandbox.reggora.io/lender/order', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c2e718cb61f76001adf9871",
"status": 200
}
This endpoint creates an order and returns the ID of the created Order.
HTTP Request
POST https://sandbox.reggora.io/lender/order
Request Parameters
Parameter | Description | Required |
---|---|---|
allocation_type | Either 'automatically' or 'manually' | True |
vendors | A list of IDs in the order of which vendor you would like to have first access to the order | True if 'manually' else False |
loan | The id of a loan file, not already associated with another order. | True |
priority | 'Normal' or 'Rush' | True |
order_request_method | 'individually' or 'broadcast'. This controls how the order is sent to appraisers, individually will expose the order to one appraiser at a time in the order that they are listed, broadcast will expose the order to all the requested appraisers at the time of ordering | false |
products | List of product ids. | True |
due_date | Due date of the order in TZ format. (UTC) | True |
additional_fees | List of additional fees an order has {'description', 'amount'} | False |
Create a Follow-up Order
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# If allocation_type is manually
body = {
'allocation_type': 'manually',
'vendors': [
'5b55d4c68d9472000fc432ef',
'5b55d4c68d9472000fc432eg',
'5b55d4c68d9472000fc432eh'
],
'loan': '5c33c716681f110034effc73',
'priority': 'Rush',
'products': ['5b55d4c68d9472000fc432ef'],
'due_date': '2018-12-24T21:00:00Z',
'additional_fees': [
{
'description': 'Large yard',
'amount': '50'
},
{
'description': 'Outside regular locations',
'amount': '20'
}
],
'is_follow_up': 'true'
}
response = requests.post('https://sandbox.reggora.io/lender/order', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c2e718cb61f76001adf9872",
"status": 200
}
This endpoint (same as the one used to create a primary order) creates a follow-up order because of the required parameter is_follow_up and returns the ID of the newly created follow-up order when successful.
HTTP Request
POST https://sandbox.reggora.io/lender/order
Request Parameters
All required parameters above (for creating an order) are also required for follow-up orders.
Parameter | Description | Required |
---|---|---|
allocation_type | Either 'automatically' or 'manually' | True |
vendors | A list of IDs in the order of which vendor you would like to have first access to the order | True if 'manually' else False |
loan | The id of a loan file, not already associated with another order. | True |
priority | 'Normal' or 'Rush' | True |
order_request_method | 'individually' or 'broadcast'. This controls how the order is sent to appraisers, individually will expose the order to one appraiser at a time in the order that they are listed, broadcast will expose the order to all the requested appraisers at the time of ordering | false |
products | List of product ids. | True |
due_date | Due date of the order in TZ format. (UTC) | True |
additional_fees | List of additional fees an order has {'description', 'amount'} | False |
is_follow_up | This indicates that order being created is a follow up order | True |
Edit an Order
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'allocation_type': 'automatically',
'priority': 'Rush',
'products': ["5b55d4c68d9472000fc432ef"],
'due_date': '2018-12-24T21:00:00Z',
'additional_fees': [
{
'description': 'Large yard',
'amount': '50'
},
{
'description': 'Outside regular locations',
'amount': '20'
}
],
'refresh': False,
}
response = requests.put('https://sandbox.reggora.io/lender/order/<order_id>', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c2e718cb61f76001adf9871",
"status": 200
}
This endpoint edits a order and returns the ID of the edited order.
HTTP Request
PUT https://sandbox.reggora.io/lender/order/<order_id>
URL Parameters
Parameter | Description |
---|---|
order_id | Id of order |
Parameter | Description | Required |
---|---|---|
allocation_type | Either 'automatically' or 'manually' | False |
priority | 'Normal' or 'Rush' | False |
products | List product ids. | False |
due_date | Due date of the order in TZ format. (UTC) | False |
additional_fees | List of additional fees an order has {'description', 'amount'} | False |
refresh | If an order has lender_attention_required field set to True, make an edit request with refresh set to True to run the order through assignment again. | False |
Reassign Order
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
"vendors": ["60904156927ee302eb3a416b"],
"allocation_type": "manually"
}
response = requests.put('https://sandbox.reggora.io/lender/order/<order_id>/vendors', body=body, headers=headers)
If the Order has not yet been accepted by a Vendor, then we will cancel any pending assignment requests and update the requested vendors. A successful request returns JSON structured like this:
{
"data": {
"id": "644192f6e1f96b1d2378d41f",
"has_been_reassigned": false,
"active_order": "644192f6e1f96b1d2378d41f"
},
"status": 200
}
If the Order was already Accepted by a Vendor, then Reggora will create a new Order. The original Order will be cancelled and the new Order will be allocated to vendors based on the arguments supplied. A successful request returns JSON structured like this:
{
"data": {
"id": "6436cacc2e7fdcfdbafb3038",
"has_been_reassigned": true,
"active_order": "64d3dac6c4f84673793f601f"
},
"status": 200
}
This endpoint is used to edit the assignment list of Vendors on a particular Order.
If the Order has already been accepted, then the Reassignment flow will cancel the original Order and create a new Order object. If the Order is in an earlier status, then the update will be performed on that same Order, overwriting any previously assigned Vendors.
HTTP Request
PUT https://sandbox.reggora.io/lender/order/<order_id>/vendors
URL Parameters
Parameter | Description |
---|---|
order_id | ID of Order |
Request Parameters
Parameter | Description | Required |
---|---|---|
allocation_type | string either 'automatically' or 'manually' | True |
vendors | list of string IDs of Vendors to assign to this Order | True if 'manually' else False |
order_request_method | string either 'individually' or 'broadcast'. This controls how the order is sent to appraisers, individually will expose the order to one appraiser at a time in the order that they are listed, broadcast will expose the order to all the requested appraisers at the time of ordering | False |
Request External Revision
import requests
import json
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# Just an example
payload = json.dumps({
"title": "Short Title of Revision Request",
"text": "Longer description of why a revision is being requested."
})
response = requests.post('https://sandbox.reggora.io/lender/order/617c30da9967580008c40440/revision',
headers=headers, data=payload)
The above command returns JSON structured like this:
{
"data": {
"id": "617c30da9967580008c40440",
"revision": {
"revision_id": "4d52563b-915a-413c-9fcd-1408dd24a763",
"created": "2023-01-01 16:00:00.000000",
"resolved": null,
"text": "Longer description of why a revision is being requested.",
"title": "Short Title of Revision Request"
}
},
"status": 201
}
This endpoint submits an external revision request for an order.
HTTP Request
POST https://sandbox.reggora.io/lender/order/<order_id>/revision
URL Parameters
Parameter | Description |
---|---|
order_id | The order id for which a revision is requested. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
title | title of request | True |
text | description of the details of the revision being requested | True |
Place Order On Hold
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'reason': 'I\'d like to wait to start this order.'
}
response = requests.put('https://sandbox.reggora.io/lender/order/<order_id>/hold', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "Order has been updated",
"status": 200
}
This endpoint will place an active order on hold, which will disable editing and other functionality while on hold.
HTTP Request
PUT https://sandbox.reggora.io/lender/order/<order_id>/hold
URL Parameters
Parameter | Description |
---|---|
order_id | Id of order |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
reason | Reason for setting order on hold | True |
Remove Order Hold
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.put('https://sandbox.reggora.io/lender/order/<order_id>/unhold', headers=headers)
The above command returns JSON structured like this:
{
"data": "Order has been updated",
"status": 200
}
This endpoint will remove an active hold on an order.
HTTP Request
PUT https://sandbox.reggora.io/lender/order/<order_id>/unhold
URL Parameters
Parameter | Description |
---|---|
order_id | Id of order |
Accept/Deny a Fee Escalation
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'order_id': '5c2e718cb61f76001adf9871',
'escalation_id': '5b55d4c68d9472000fc432ef',
'accept': True
}
response = requests.post('https://sandbox.reggora.io/lender/process-escalation', body=body, headers=headers)
The above command returns JSON structured like this:
{
"success": "Escalation accepted",
"status": 200
}
This endpoint will accept or deny a fee escalation.
HTTP Request
POST https://sandbox.reggora.io/lender/process-escalation
Request Body Parameters
Parameter | Description | Type | Required |
---|---|---|---|
order_id | The ID of the order | string | True |
escalation_id | The ID of the escalation | string | True |
accepted | Status of the escalation | bool | True |
Override Order Waiting for Payment
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.put('https://sandbox.reggora.io/lender/orde/<order_id>/override', headers=headers)
The above command returns JSON structured like this:
{
"success": "Your order has been updated",
"status": 200
}
This endpoint overrides an order waiting for payment.
HTTP Request
PUT https://sandbox.reggora.io/lender/order-submission/approve/
URL Parameters
Parameter | Description |
---|---|
order_id | Id of order |
Conversation
Get Conversation by ID
This endpoint returns a conversation object.
HTTP Request
GET https://sandbox.reggora.io/lender/conversation/<conversation_id>
URL Parameters
Parameter | Description |
---|---|
conversation_id | The ID of the Conversation. |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/conversation/<conversation_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"conversation": {
"id": "5c4f16764672bb00105ea5f9",
"messages": [{
"id": "5c4f16764672bb00105ea5f9",
"message": "Hey this is a message",
"sender": {
"id": "5c4f16764672bb00105ea5f9",
"name": "John Smith"
},
"sent_time": "2018-04-19T15:02:02.157Z"
}]
}
},
"status": 200
}
Lender Send Message
This endpoint sends a message.
HTTP Request
POST https://sandbox.reggora.io/lender/conversation/<conversation_id>
URL Parameters
Parameter | Description |
---|---|
conversation_id | The ID of the Conversation. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
message | The message you would like to send | True |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.post('https://sandbox.reggora.io/lender/conversation/<conversation_id>',
body={'message': 'Hi there!'}, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c4f16764672bb00105ea5f9",
"status": 200
}
eVault
Get eVault by ID
This endpoint returns an eVault object.
HTTP Request
GET https://sandbox.reggora.io/lender/evault/<evault_id>
URL Parameters
Parameter | Description |
---|---|
evault_id | The ID of the eVault. |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/evault/<evault_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"evault": {
"id": "5c4f16764672bb00105ea5f9",
"documents": [{
"document_name": "test.pdf",
"document_id": "24bab39a-4404-11e8-ba10-02420a050006",
"upload_datetime": "2018-04-19T15:02:02.157Z"
}]
}
},
"status": 200
}
Get Document
This endpoint returns a file object specified by the evault ID and the document ID.
HTTP Request
GET https://sandbox.reggora.io/lender/evault/<evault_id>/<document_id>
URL Parameters
Parameter | Description |
---|---|
evault_id | The ID of the eVault. |
document_id | The ID of the document. |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/evault/<evault_id>/<document_id>', headers=headers)
The above command returns a file object. The file sending is implemented with the flask send_file extension.
Upload Document
This endpoint allows you to upload a document to an evault and returns the ID of the document.
HTTP Request
POST https://sandbox.reggora.io/lender/evault
Request Body Parameters
Parameter | Description | Required |
---|---|---|
id | The id of the eVault you are uploading to | True |
file | The file you want to upload | True |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
"id": "24bab39a-4404-11e8-ba10-02420a050006"
"file": File, # Required
}
response = requests.post('https://sandbox.reggora.io/lender/evault', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c4f16764672bb00105ea5f9",
"status": 200
}
Upload P&S
This endpoint allows you to upload a P&S to an order and returns the ID of the P&S document.
HTTP Request
POST https://sandbox.reggora.io/lender/p_and_s
Request Body Parameters
Parameter | Description | Required |
---|---|---|
id | The id of the Order you are uploading the Purchase and Sale agreement to | True |
file | The file you want to upload | True |
document_name | The name of the document to be uploaded | False |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
"id": "5c4f16764672bb00105ea472"
"file": File, # Required
"document_name": "my_test.pdf" #This is an optional parameter
}
response = requests.post('https://sandbox.reggora.io/lender/p_and_s', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c4f16764672bb00105ea5f9",
"status": 200
}
Delete Document
This endpoint allows you to delete a document from the evault.
HTTP Request
DELETE https://sandbox.reggora.io/lender/evault
Request Body Parameters
Parameter | Description | Required |
---|---|---|
id | The ID of the eVault of the document you are deleting | True |
document_id | the ID of the document you are deleting | True |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'id': '524523ff2d2d223d23',
'document_id': '00a1eb9e-ba6a-11e9-b584-0242ac120002',
}
response = requests.delete('https://sandbox.reggora.io/lender/evault', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "Your document has been deleted",
"status": 200
}
Products
Get All Products
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# Just an example
query_params = {
'offset': 0,
'limit': 10,
'ordering': '-created',
}
response = requests.get('https://sandbox.reggora.io/lender/products', params=query_params headers=headers)
The above command returns JSON structured like this:
{
"data": {
"products": [
{
"id": "5b50a31fc2b109000fc82af5",
"product_name": "Products # 1AB",
"amount": "300.01",
"inspection_type": "interior",
"requested_forms": "Product #1 Forms, Product #1 Extra Forms",
},
{
"id": "5b55d4c68d9472000fc432ef",
"product_name": "5000",
"amount": "5000.00",
"inspection_type": "interior",
"requested_forms": "1004 MC",
},
{
"id": "5beb226a828174000db1613e",
"product_name": "Reggora Network Product",
"amount": "500.00",
"inspection_type": "interior",
"requested_forms": null,
},
{
"id": "5c2677c69121aa002245537c",
"product_name": "Product 4",
"amount": "100.00",
"inspection_type": "exterior",
"requested_forms": "unsupported forms",
},
]
},
"status": 200
}
This endpoint retrieves all products.
HTTP Request
GET https://sandbox.reggora.io/lender/products
Get Product
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/product/<product_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"product": {
"id": "5b55d4c68d9472000fc432ef",
"product_name": "Product #1",
"amount": "5000.00",
"inspection_type": "interior",
"requested_forms": "1004 MC"
}
}
"status": 200
}
This endpoint retrieves a specific product by id.
HTTP Request
GET https://sandbox.reggora.io/lender/product/<product_id>
URL Parameters
Parameter | Description |
---|---|
product_id | The ID of the product. |
Delete Product
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.delete('https://sandbox.reggora.io/lender/product/<product_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": "Your product has been deleted",
"status": 200
}
This endpoint deletes a specific product. If an order or a loan is associated with this product the reference will not be broken.
HTTP Request
DELETE https://sandbox.reggora.io/lender/product/<product_id>
URL Parameters
Parameter | Description |
---|---|
product_id | The ID of the product. |
Create a Product
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'product_name': 'Full Appraisal',
'amount': '100.00',
'inspection_type': 'interior',
'requested_forms': '1004MC, BPO'
}
response = requests.post('https://sandbox.reggora.io/lender/product', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5b55d4c68d9472000fc432ef",
"status": 200
}
This endpoint creates a product and returns the ID of the created product.
HTTP Request
POST https://sandbox.reggora.io/lender/product
Request Body Parameters
Parameter | Description | Required |
---|---|---|
product_name | The description/title of the product. | True |
amount | The non-zero, positive cost of the product. | True |
inspection_type | 'interior' or 'exterior' | True |
requested_forms | Free text that can describe any unorthodox forms | False |
Edit a Product
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'product_name': 'Full Appraisal',
'amount': '100.00',
'inspection_type': 'interior',
'requested_forms': '1004MC, BPO'
}
response = requests.put('https://sandbox.reggora.io/lender/product/<product_id>', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5b55d4c68d9472000fc432ef",
"status": 200
}
This endpoint edits a product and returns the ID of the edited product.
HTTP Request
PUT https://sandbox.reggora.io/lender/product/<product_id>
URL Parameters
Parameter | Description |
---|---|
product_id | The product to be edited |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
product_name | The description/title of the product. | False |
amount | The non-zero, positive cost of the product. | False |
inspection_type | 'interior' or 'exterior' | False |
requested_forms | A free text field that informs the vendor which forms are being ordered. | False |
Submissions
Get All Submissions
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/order-submissions/<order_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"submissions": [
{
"version": 1,
"pdf_report": "https://sandbox.reggora.io/lender/order-submission/5c4f16764672bb00105ea5f9/1/pdf_report",
"xml_report": "https://sandbox.reggora.io/lender/order-submission/5c4f16764672bb00105ea5f9/1/xml_report",
"invoice": "https://sandbox.reggora.io/lender/order-submission/5c4f16764672bb00105ea5f9/1/invoice",
"fannie_ssr": "https://reggora-testing/ucdp_submission_results/fannie_ssr",
"freddie_ssr": "https://reggora-testing/ucdp_submission_results/freddie_ssr",
"fha_ssr": "https://reggora-testing/ucdp_submission_results/fha_ssr",
"delivery_receipts": [
{
"recipient_name": "John Doe",
"recipient_role": "borrower",
"recipient_home_phone": "1231231234",
"recipient_mobile_phone": "1231231234",
"recipient_work_phone": "1231231234",
"recipient_email": "fake@email.com",
"submission_sent": "February 02, 2021 02:15 PM EST",
"denied_e_consent": "February 02, 2021 02:15 PM EST",
"e_consent": "February 02, 2021 02:15 PM EST",
"submission_downloaded": "February 02, 2021 02:15 PM EST",
"mailed_date": "February 02, 2021 02:15 PM EST",
"mailed_by": "Fake Person"
}
]
}
]
},
"status": 200
}
This endpoint retrieves all submissions associated with an order.
HTTP Request
GET https://sandbox.reggora.io/lender/order-submissions/<order_id>
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Download Submission Document
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/order-submission/<order_id>/<version>/<report_type>', headers=headers)
The above command returns a file object. The file sending is implemented with the flask send_file extension.
This endpoint retrieves one of the three forms that are associated with an order submission. The URL formulas are built for you using the "Get Submissions" API endpoint.
HTTP Request
GET https://sandbox.reggora.io/lender/order-submission/<order_id>/<version>/<report_type>
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
version | The version number of the submission object. |
report_type | The name of the report that you are trying to download. (pdf_report, xml_report, or invoice) |
Get Submission Appraisal Data
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/order-submission-appraisal/<order_id>/<version>/', headers=headers)
The above command returns JSON structured like this:
{
"source": "pdf",
"data": {
// ...
}
}
This endpoint retrieves the parsed appraisal data associated with an order submission.
HTTP Request
GET https://sandbox.reggora.io/lender/order-submission-appraisal/<order_id>/<version>/
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
version | The version number of the submission object. |
Approve Order Submission
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'order_id': '61ae45992db8d200461f9e8a',
'version': '1'
}
response = requests.put('https://sandbox.reggora.io/lender/order-submission/approve/', body=body, headers=headers)
The above command returns JSON structured like this:
{
"order_id": "Order submission has been approved",
"status": 200
}
This endpoint approves an order submission.
HTTP Request
PUT https://sandbox.reggora.io/lender/order-submission/approve/
Request Body Parameters
Parameter | Description | Required |
---|---|---|
order_id | The ID of the order. | True |
version | The version number of the submission object. | True |
Users
Get All Users
This endpoint returns a list of all the users in the requesting lender.
HTTP Request
GET https://sandbox.reggora.io/lender/users
Query Parameters
Parameter | Default | Description |
---|---|---|
ordering | -created | The field on which the returned users are sorted. |
search | None | A string used to filter down the returned users. |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/users?offset=<offset>&limit=<limit>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"users": [
{
"id": "5c33c6b1681f110034effc72",
"email": "fake@email.com",
"phone_number": "1231231234",
"cell_number": "1231231235",
"firstname": "John",
"lastname": "Doe",
"created": "2019-01-09T12:00:00.000Z",
"nmls_id": "12345",
"matched_users": [
{
"id": "5c33c6b1681f110034effc72",
"email": "more_fake@email.com",
"firstname": "Jane",
"lastname": "Doe"
}
// ...Rest of users
],
"role": "Admin"
},
// ...etc.
]
},
"status": 200
}
Get All User Roles
This endpoint returns a list of all user roles available to the requesting lender.
HTTP Request
GET https://sandbox.reggora.io/lender/users/roles
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/users/roles', headers=headers)
The above command returns JSON structured like this:
{
"data": [
{
"name": "Admin",
"id": "5e4dad9e13a19201a460a22a"
},
{
"name": "Loan Officer",
"id": "5e4dad9e13a19201a460a22b"
},
{
"name": "Unmatched Processor",
"id": "5e4dad9e13a19201a460a22c"
},
{
"name": "Matched Processor",
"id": "5e4dad9e13a19201a460a22d"
},
{
"name": "Access All Processor",
"id": "5e4dad9e13a19201a460a22e"
}
]
}
Get User By ID
This endpoint takes a user ID as a URL parameter and returns a user object.
HTTP Request
GET https://sandbox.reggora.io/lender/users/<user_id>
URL Parameters
Parameter | Description |
---|---|
user_id | The ID of the User. |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/users/<user_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"user": {
"id": "5c33c6b1681f110034effc72",
"email": "fake@email.com",
"phone_number": "1231231234",
"cell_number": "1231231235",
"firstname": "John",
"lastname": "Doe",
"nmls_id": "12345", // If applicable
"created": "2019-01-09T12:00:00.000Z",
"role": "Admin",
"matched_users": [
{
"id": "5c33c6b1681f110034effc72",
"email": "more_fake@email.com",
"firstname": "Jane",
"lastname": "Doe"
}
// ...Rest of users
],
},
},
"status": 200
}
Invite User
This endpoint invites a user to the reggora platform. Once the invitation has been sent the user is added to your lender's list of users but only as a deactivated user. The invitee must accept the invitation in the email to become a full-fledged user.
HTTP Request
POST https://sandbox.reggora.io/lender/users/invite
Request Body Parameters
Parameter | Description | Required |
---|---|---|
Email of the user you are inviting | True | |
role | Name of the role you want the invited user to have | True |
firstname | First name of the user you are inviting | True |
lastname | Last name of the user you are inviting | True |
phone_number | Phone number of the user you are inviting | True |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'email': 'fake@reggora.com',
'firstname': 'Fake',
'lastname': 'Person',
'phone_number': '1231231234',
'role': 'Admin'
}
response = requests.post('https://sandbox.reggora.io/lender/users/invite', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "Your invite has been sent",
"status": 200
}
Create User
This endpoint creates a user to the reggora platform. This functionality is useful if you would like to create a user without notifying the user's owner at the time of creation.
HTTP Request
POST https://sandbox.reggora.io/lender/users
Request Body Parameters
Parameter | Description | Required |
---|---|---|
Email of the user you are inviting | True | |
role | Name of the role you want the invited user to have | True |
firstname | First name of the user you are inviting | True |
lastname | Last name of the user you are inviting | True |
phone_number | Phone number of the user you are inviting | True |
branch_identifier | The unique identifer of the branch this user belongs to | False |
nmls_id | The identifer of this user in the Nationwide Mortgage Licensing System and Registry | False |
los_username | The unique identifer this user in their loan origination system | False |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'email': 'fake@reggora.com',
'firstname': 'Fake',
'lastname': 'Person',
'phone_number': '1231231234',
'role': 'Admin',
'branch_id': '5afafe407a3050000a7a57a3'
}
response = requests.post('https://sandbox.reggora.io/lender/users', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c33c6b1681f110034effc72",
"status": 200
}
Edit User
This endpoint updates a user's information. No fields are required and only the supplied fields will be updated on the user.
HTTP Request
PUT https://sandbox.reggora.io/lender/users/<user_id>
URL Parameters
Parameter | Description |
---|---|
user_id | The ID of the User. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
Email of the user | False | |
role | Name of the role you want the invited user to have | False |
firstname | First name of the user | False |
lastname | Last name of the user | False |
branch_id | Branch ID to add user to | False |
nmls_id | If applicable, the NLMS id of the user | False |
matched_users | A list of user IDs that you want matched with this user | False |
phone_number | Phone number of the user | False |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'email': 'fake_person@reggora.com',
'firstname': 'Fake',
'lastname': 'Person',
'phone_number': '1231231235',
'branch_id': '5afafe407a3050000a7a57a3',
'role': 'Loan Officer',
'nmls_id': '12345',
'matched_users': [
'5c33c6b1681f110034effc72',
'5c33c6b1681f110034effc72',
'5c33c6b1681f110034effc72'
]
}
response = requests.put('https://sandbox.reggora.io/lender/users/<user_id>', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c33c6b1681f110034effc72",
"status": 200
}
Delete User
This endpoint removes a user from a lender.
URL Parameters
Parameter | Description |
---|---|
user_id | The ID of the User. |
HTTP Request
DELETE https://sandbox.reggora.io/lender/users/<user_id>
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.delete('https://sandbox.reggora.io/lender/users/<user_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": "Your user has been deleted",
"status": 200
}
Vendors
Get All Vendors
This endpoint returns all the vendors associated with the requesting lender.
HTTP Request
GET https://sandbox.reggora.io/lender/vendors
Query Parameters
Parameter | Default | Description |
---|---|---|
offset | 0 | Number of vendors to skip before list gets returned (Used in pagination). |
limit | 0 | Limit of panelists to return (If set to 0 there is no limit). |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/vendors?offset=<offset>&limit=<limit>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"vendors": [
{
"id": "5c33c6b1681f110034effc72",
"firm_name": "Test Vendor",
"email": "test@vendor.com",
"phone": "1231231234",
"accepting_jobs": true
},
// ... 9 more
]
},
"status": 200
}
Get Vendors By Zone
This endpoint returns the vendors associated with the requesting lender filtered by zip code.
HTTP Request
POST https://sandbox.reggora.io/lender/vendors/by_zone
Query Parameters
Parameter | Default | Description |
---|---|---|
offset | 0 | Number of vendors to skip before list gets returned (Used in pagination). |
limit | 0 | Limit of panelists to return (If set to 0 there is no limit). |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
zones | List of zip codes you are interested in filtering by | True |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'zones': ['02806', '02807', '03102']
}
response = requests.post('https://sandbox.reggora.io/lender/vendors/by_zone?offset=<offset>&limit=<limit>', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": {
"vendors": [
{
"id": "5c33c6b1681f110034effc72",
"firm_name": "Test Vendor",
"email": "test@vendor.com",
"phone": "1231231234",
"accepting_jobs": true
},
// ... 9 more
]
},
"status": 200
}
Get Vendors By Branch
This endpoint returns the vendors associated with the requesting lender filtered by branch.
HTTP Request
GET https://sandbox.reggora.io/lender/vendors/branch
Query Parameters
Parameter | Default | Description |
---|---|---|
branch_id | None | Filter the vendor panel by the branch they are affiliated with |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/vendors/branch?branch_id=<branch_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"vendors": [
{
"id": "5c33c6b1681f110034effc72",
"firm_name": "Test Vendor",
"email": "test@vendor.com",
"phone": "1231231234",
"accepting_jobs": true
},
// ... etc
]
},
"status": 200
}
Get Vendor By ID
This endpoint takes a vendor ID as a URL parameter and returns the corresponding vendor.
HTTP Request
GET https://sandbox.reggora.io/lender/vendor/<vendor_id>
URL Parameters
Parameter | Description |
---|---|
vendor_id | The ID of the vendor |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/vendor/<vendor_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"vendor": {
"id": "5c33c6b1681f110034effc72",
"firm_name": "Test Vendor",
"email": "test@vendor.com",
"phone": "1231231234",
"accepting_jobs": true,
"lender_coverage": [
{
"county": "001",
"state": "44",
"zip": "02806"
},
// ...etc
],
},
},
"status": 200
}
Add Vendor
This endpoint adds a vendor to your lender. If they are not already signed up for the Reggora platform they will receive an email asking them to create an account.
HTTP Request
POST https://sandbox.reggora.io/lender/vendors
URL Parameters
Parameter | Description | Required |
---|---|---|
firm_name | The firm name | True |
firstname | The first name of the main contact at the firm | True |
lastname | The last name of the main contact at the firm | True |
The firm email | True | |
phone | The firm phone | True |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'firm_name': 'Appraisal Firm',
'firstname': 'Fake',
'lastname': 'Appraiser',
'email': 'fake@appraiser.com',
'phone': '1212312334',
}
response = requests.post('https://sandbox.reggora.io/lender/vendors', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "5c33c6b1681f110034effc72",
"status": 200
}
Edit Vendor
This endpoint edits a vendor. Only the fields that are in the request body will be updated.
HTTP Request
PUT https://sandbox.reggora.io/lender/vendor/<vendor_id>
URL parameters
Parameter | Description |
---|---|
vendor_id | The ID of the vendor |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
firm_name | The firm name | False |
firstname | The first name of the main contact at the firm | False |
lastname | The last name of the main contact at the firm | False |
The firm email | False | |
phone | The firm phone | False |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
"firm_name": "New Vendor",
"firstname": "Vendor",
"lastname": "Admin",
"email": "vendor@reggora.com",
"phone": "4567891011"
}
response = requests.put('https://sandbox.reggora.io/lender/vendor/<vendor_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": "5c33c6b1681f110034effc72",
"status": 200
}
Delete Vendor
This endpoint removes a vendor from your lender panel.
HTTP Request
DELETE https://sandbox.reggora.io/lender/vendor/<vendor_id>
URL parameters
Parameter | Description |
---|---|
vendor_id | The ID of the vendor |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.delete('https://sandbox.reggora.io/lender/vendor/<vendor_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": "Your vendor has been removed",
"status": 200
}
Schedule & Payment App
Send Payment App
HTTP Request
POST https://sandbox.reggora.io/lender/consumer/payment
Request Body Parameters
Parameter | Description | Required |
---|---|---|
consumer_email | Email of consumer you are sending payment app to. | True |
order_id | The ID of the order you want to send the payment app in relation to. | True |
user_type | Either consumer or manual . The consumer option being automatically sent by saved consumer, the manual option being the payment app being sent to a certain custom consumer you specify with the following values. |
True |
payment_type | Either manual or stripe . The manual option being a manual payment where you set when the payment has been paid. This option should be used when you are adding a payment that has already been completed. The stripe option being a payment done through our Stripe Plaid integration. |
True |
amount | The amount of money you are requesting with the payment app. | True |
firstname | First name of consumer you are sending payment app to. | True if user_type = manual |
lastname | Last name of consumer you are sending payment app to. | True if user_type = manual |
paid | Boolean describing if payment has been paid already or not. | True if payment_type = manual |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# For manual payment_type and manual user_type
body = {
'consumer_email': 'example@consumer.com',
'order_id': '5c33c6b1681f110034effc72',
'user_type': 'manual',
'payment_type': 'manual',
'amount': 100,
'firstname': 'Example',
'lastname': 'Consumer',
'paid': False
}
# For stripe payment_type and consumer user_type
body = {
'consumer_email': 'example@consumer.com',
'order_id': '5c33c6b1681f110034effc72',
'user_type': 'consumer',
'payment_type': 'stripe',
'amount': 100,
}
response = requests.post('https://sandbox.reggora.io/lender/consumer/payment', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "Payment app sent.",
"status": 200
}
Send Scheduling App
HTTP Request
POST https://sandbox.reggora.io/lender/consumer/scheduling
Request Body Parameters
Parameter | Description | Required |
---|---|---|
consumer_emails | List of emails of the consumers you are sending scheduling app to. | True |
order_id | The ID of the order you want to send the scheduling app in relation to. | True |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'consumer_emails': ['example@consumer.com'],
'order_id': '5c33c6b1681f110034effc72',
}
response = requests.post('https://sandbox.reggora.io/lender/consumer/scheduling', body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "Scheduling app sent.",
"status": 200
}
Consumer Application Link
HTTP Request
GET https://sandbox.reggora.io/lender/<order_id>/<consumer_id>/<link_type>
URL Parameters
Parameter | Description | Required |
---|---|---|
order_id | The ID of the order. | True |
consumer_id | The ID of the consumer who is accessing the application. | True |
link_type | The section of the consumer application you want to show the consumer. This argument can be, payment, scheduling, or both | True |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
order_id = '5c33c6b1681f110034effc72'
consumer_id = '5c33c716681f110034effc73'
link_type = 'payment' # payment/schedule/both
response = requests.get('https://sandbox.reggora.io/{}/{}/{}'.format(order_id, consumer_id, link_type), body=body, headers=headers)
The above command returns JSON structured like this:
{
"data": "https://devconnect.reggora.com/schedule/.eJw1yjEOgCAMBdC7dJYE6i9WL2OAQuKgJBon492dfPN7qJ9Wz3UzWkiMUZoWnYMV-DFEFuSJaaDSj-ve_xgbGqvCcbLqoCZOq49OMhQhRUMN9H7l7hoK.B8-lmAvVwbOAqLz_-uzL8JIGXgA?iframe=true&override=payment",
"status": 200
}
Branch
Create Branch
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
"branch_identifier" : "Location 123456",
"name" : "New Branch",
"address" : "822 Main St",
"branch_classification" : "retail",
"is_joint_venture": False,
"city" : "Boston",
"state" : "MA",
"ZIP" : "06201",
"contact_phone_number" : "555-555-5555",
"contact_email" : "user@reggorapartner.com",
"parent_branch_identifier": "ParentBranch202"
}
response = requests.post('https://sandbox.reggora.io/lender/branch', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"branch": {
"branch_id": "5d6ecfdb69655808d5b3d012",
"branch_identifier": "test_branch_1",
"name": "test branch",
"address": "123 Main St",
"city": "Boston",
"state": "MA",
"ZIP": "90210",
"branch_classification": "retail",
"is_joint_venture": false,
"contact_phone_number": "555-555-5555",
"contact_email": "email@testreggora.com",
"loan_officers": [],
"parent_branch_identifier": "test_branch_2",
"exists_in_hierarchy": true
}
},
"status": 201
}
This endpoint creates a branch
HTTP Request
POST https://sandbox.reggora.io/lender/branch
Request Body Parameters
Parameter | Description | Required |
---|---|---|
branch_identifier | Unique identifier | True |
name | Name of the branch | False |
address | Street address of the branch | False |
branch_classification | Options: ['retail', 'wholesale'] | False |
is_joint_venture | Boolean / Default is False | False |
city | City of the branch | False |
state | State of the branch | False |
ZIP | Zipcode of the branch | False |
contact_phone_number | Phone number | False |
contact_email | Email address | False |
parent_branch_identifier | Unique identifier of parent | False |
Response Body Attributes
Attribute | Description | Type |
---|---|---|
branch_identifier | Unique identifier | string |
name | Name of the branch | string |
address | Street address of the branch | string |
city | City of the branch | string |
state | State of the branch | string |
ZIP | Zipcode of the branch | string |
branch_classification | Options: ['retail', 'wholesale'] | string |
is_joint_venture | Boolean / Default is False | bool |
contact_phone_number | Phone number | string |
contact_email | Email address | string |
loan_officers | List of loan officers | Dict |
parent_branch_identifier | The branch identifier of the parent | nullable string |
exists_in_hierarchy | Flag if branch is in the lender hierarchy | bool |
Specific Errors
Status Code | Message |
---|---|
400 | Invalid integration header |
400 | User is not in a lender. |
400 | Parent branch with branch_identifier: <{parent_branch_identifier}> does not exist in hierarchy. |
400 | Hierarchy relationship invalid - loop detected. Parent branch <{parent_branch_identifier}> is the child branch of <{existing_branch.branch_identifier}>. |
404 | Branch |
409 | Active branch with branch_identifier: <{branch_identifier}> already exists. |
500 | Error creating branch with branch_identifier: <{branch_identifier}>. |
Errors not encapsulated in this custom error list can be interpreted as standard REST RFC errors.
Delete Branch
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.delete('https://sandbox.reggora.io/lender/branch/<branch_identifier>', headers=headers)
The above command returns JSON structured like this:
{
"success": "Branch <branch_identifier> has been deleted.",
"status": 200
}
This endpoint soft deletes a branch
HTTP Request
DELETE https://sandbox.reggora.io/lender/branch/<branch_identifier>
URL Parameters
Parameter | Description |
---|---|
branch_identifer | The unique identifier of the branch. |
Specific Errors
Status Code | Message |
---|---|
400 | Invalid integration header |
400 | User is not in a lender. |
400 | Unable to delete branch <{branch_identifier}> -- it is a parent branch. |
404 | Branch |
500 | Error deleting branch with branch_identifier: |
Errors not encapsulated in this custom error list can be interpreted as standard REST RFC errors.
Delete Branch and Reassign Loan Officers
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
"target_branch_identifier" : "branch_identifier_123",
}
response = requests.delete('https://sandbox.reggora.io/lender/branch/<branch_identifier>/reassign', headers=headers)
The above command returns JSON structured like this:
{
"success": "Branch <branch_identifier> has been deleted.",
"status": 200
}
This endpoint soft deletes a branch and reassigns the loan officers to a target branch specified in the body of the request.
HTTP Request
DELETE https://sandbox.reggora.io/lender/branch/<branch_identifier>/reassign
URL Parameters
Parameter | Description |
---|---|
branch_identifer | The unique identifier of the branch. |
Specific Errors
Status Code | Message |
---|---|
400 | Invalid integration header |
400 | User is not in a lender. |
400 | Unable to delete branch <{branch_identifier}> -- it is a parent branch. |
400 | Missing 'target_branch_identifier' in the body to reassign loan officers to. |
404 | Branch |
404 | Target branch not found for target_branch_identifier: |
500 | Error deleting branch with branch_identifier: |
Errors not encapsulated in this custom error list can be interpreted as standard REST RFC errors.
Update Branch
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.put('https://sandbox.reggora.io/lender/branch/<branch_identifier>?update_hierarchy=false', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"branch": {
"branch_id": "5d6ecfdb69655808d5b3d012",
"branch_identifier": "test_branch_1",
"name": "test branch",
"address": "123 Main St",
"city": "Boston",
"state": "MA",
"ZIP": "90210",
"branch_classification": "retail",
"is_joint_venture": false,
"contact_phone_number": "555-555-5555",
"contact_email": "email@testreggora.com",
"loan_officers": [
{
"id": "6373c8fcd74957d911629dcf",
"email": "email@testreggora.com",
"firstname": "Homer",
"lastname": "Simpson",
"phone_number": "1234567890",
"created": "2022-11-15 17:15:50.307000",
}
],
"parent_branch_identifier": "test_branch_2",
"exists_in_hierarchy": true
}
},
"status": 200
}
This endpoint updates a branch
HTTP Request
PUT https://sandbox.reggora.io/lender/branch/<branch_identifier>?update_hierarchy=false
URL Parameters
Parameter | Description |
---|---|
branch_identifer | The unique identifier of the branch. |
URL Query Parameters
Parameter | Description |
---|---|
update_hierarchy | An optional boolean that determines whether or not to update branch hierarchy. Defaults to False. |
Response Body Attributes
Attribute | Description | Type |
---|---|---|
branch_identifier | Unique identifier | string |
name | Name of the branch | string |
address | Street address of the branch | string |
city | City of the branch | string |
state | State of the branch | string |
ZIP | Zipcode of the branch | string |
branch_classification | Options: ['retail', 'wholesale'] | string |
is_joint_venture | Boolean / Default is False | bool |
contact_phone_number | Phone number | string |
contact_email | Email address | string |
loan_officers | List of loan officers | Dict |
parent_branch_identifier | The branch identifier of the parent | nullable string |
exists_in_hierarchy | Flag if branch is in the lender hierarchy | bool |
Loan Officer
Attribute | Description | Type |
---|---|---|
id | Unique identifier | string |
Email address | string | |
firstname | First Name | string |
lastname | Last Name | string |
phone_number | Phone number | string |
created | Date Created UTC | string |
Specific Errors
Status Code | Message |
---|---|
400 | Invalid integration header |
400 | User is not in a lender. |
400 | Parent branch with branch_identifier: <{parent_branch_identifier}> does not exist in hierarchy. |
400 | Missing 'parent_branch_identifier' in the body to update the hierarchy relationship. |
400 | Hierarchy relationship invalid - loop detected. Parent branch <{parent_branch_identifier}> is the child branch of <{existing_branch.branch_identifier}>. |
404 | Branch |
500 | Error updating branch with branch_identifier: <{branch_identifier}>. |
Errors not encapsulated in this custom error list can be interpreted as standard REST RFC errors.
Get Branch
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/lender/branch/<branch_identifier>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
"branch": {
"branch_id": "5d6ecfdb69655808d5b3d012",
"branch_identifier": "test_branch_1",
"name": "test branch",
"address": "123 Main St",
"city": "Boston",
"state": "MA",
"ZIP": "90210",
"branch_classification": "retail",
"is_joint_venture": false,
"contact_phone_number": "555-555-5555",
"contact_email": "email@testreggora.com",
"loan_officers": [
{
"id": "6373c8fcd74957d911629dcf",
"email": "email@testreggora.com",
"firstname": "Homer",
"lastname": "Simpson",
"phone_number": "1234567890",
"created": "2022-11-15 17:15:50.307000",
}
],
"parent_branch_identifier": "test_branch_2",
"exists_in_hierarchy": true
}
},
"status": 200
}
This endpoint fetches a branch
HTTP Request
GET https://sandbox.reggora.io/lender/branch/<branch_identifier>
URL Parameters
Parameter | Description |
---|---|
branch_identifer | The unique identifier of the branch. |
Response Body Attributes
Attribute | Description | Type |
---|---|---|
branch_identifier | Unique identifier | string |
name | Name of the branch | string |
address | Street address of the branch | string |
city | City of the branch | string |
state | State of the branch | string |
ZIP | Zipcode of the branch | string |
branch_classification | Options: ['retail', 'wholesale'] | string |
is_joint_venture | Boolean / Default is False | bool |
contact_phone_number | Phone number | string |
contact_email | Email address | string |
loan_officers | List of loan officers | Dict |
parent_branch_identifier | The branch identifier of the parent | nullable string |
exists_in_hierarchy | Flag if branch is in the lender hierarchy | bool |
Loan Officer
Attribute | Description | Type |
---|---|---|
id | Unique identifier | string |
Email address | string | |
firstname | First Name | string |
lastname | Last Name | string |
phone_number | Phone number | string |
created | Date Created UTC | string |
Lender Webhook Events Introduction
We offer a webhook integration to keep up to date on Reggora notifications.
Loan Webhooks
These webhooks pertain to loan files.
Loan Created Webhook
This webhook will notify your integration whenever a new loan file has been created. To the right is an example of what one of the webhook requests we make will look like.
# On Manual Creation or 1003 Upload
{
"event_type": "loan_created",
"event_data": {
"loan_id": "5d6eae5f6965580623d7d81d",
"loan_number": "044551231231",
"related_order": null,
"created": "2019-09-03 18:18:06.338039"
},
"event_time": "2019-09-03 18:18:07.601971"
}
# On CSV Upload
{
"event_type": "loan_created",
"event_data": {
"loans": [
{
"loan_id": "5d6eafd569655806515e567b",
"loan_number": "2048",
"related_order": null,
"created": "2019-09-03 18:24:21.274578"
},
{
"loan_id": "5d6eafd569655806515e5684",
"loan_number": "2049",
"related_order": null,
"created": "2019-09-03 18:24:21.647568"
}
# .... etc
]
},
"event_time": "2019-09-03 18:24:22.077836"
}
Loan Updated Webhook
This webhook will notify your integration whenever one of your loans are edited.
{
"event_type": "loan_updated",
"event_data": {
"loan_id": "5d4c3aef33636c000f3f9a51",
"loan_number": "sdfsdfsd",
"related_order": null,
"created": "2019-08-08 15:08:31.250000"},
"event_time": "2019-09-04 14:51:57.925502"
}
Loan Deleted Webhook
This webhook will notify your integration whenever a loan is deleted from your lender.
{
"event_type": "loan_deleted",
"event_data": {
"loan_id": "5d4c3aef33636c000f3f9a51"
},
"event_time": "2019-09-04 14:54:46.299226"
}
Lender Order Webhooks
These webhooks pertain to orders and the status of those orders. They are available for both vendor and integrations.
Order Created Webhook
This webhook will notify your integration whenever a new order is created.
{
"event_type": "order_created",
"event_data": {
"id": "5d6ebcfb696558079322c264",
"created": "2019-09-03 19:20:27.193000",
"status": "Finding Appraisers"
},
"event_time": "2019-09-03 19:20:44.057271"
}
Order Updated Webhook
This webhook will notify your integration whenever a order is updated.
{
"event_type": "order_updated",
"event_data": {
"id": "5d6ebcfb696558079322c264",
"created": "2019-09-03 19:20:27.193000",
"status": "Finding Appraisers"
},
"event_time": "2019-09-03 19:20:44.057271"
}
Order Status Webhook
This webhook will notify your integration whenever one of your orders change status.
{
"event_type": "status_update",
"event_data": {
"id": "5c4f16764672bb00105ea6y9",
"status": "Accepted",
"created": "2019-04-11 21:00:00"
},
"event_time": "2019-04-11 21:00:00"
}
Order Override Waiting For Payment Webhook
This webhook will notify your integration whenever one of your orders waiting for payment has been overridden.
{
"event_type": "order_override_waiting_for_payment",
"event_data": {
"id": "5c4f16764672bb00105ea6y9",
"status": "Finding Appraisers",
"created": "2019-04-11 21:00:00"
},
"event_time": "2019-04-11 21:00:00"
}
Order Approved Webhook
This webhook will notify your integration whenever a submission is approved on an order.
{
"event_type": "order_approved",
"event_data": {
"id": "5d7264935d0e2d003476b15d",
"created": "2019-09-06 13:52:19.660000",
"status": "Submitted"
},
"event_time": "2019-09-06 15:07:19.445753"
}
Order Placed on Hold Webhook
This webhook will notify your integration whenever an order has been placed on hold.
{
"event_type": "order_placed_on_hold",
"event_data": {
"id": "5d2f6991d648010006819caf",
"status": "Order Placed On Hold",
"created": "2018-08-23 17:28:04.723000",
"message": "Example Reason"
},
"event_time": "2019-03-17 12:00:00"
}
Order Taken Off Hold Webhook
This webhook will notify your integration whenever an order has been removed from a held state.
{
"event_type": "order_removed_on_hold",
"event_data": {
"id": "5d2f6991d648010006819caf",
"status": "Order Removed From Hold",
"created": "2018-08-23 17:28:04.723000",
},
"event_time": "2019-03-17 12:00:00"
}
Order Note Created Webhook
This webhook will notify your integration whenever an order has a note added to it.
{
"event_type": "order_note_created",
"event_data": {
"id": "5d7274b95d0e2d0062aa2994",
"created": "2019-09-06 15:01:13.617000",
"status": "Finding Appraisers",
"note": "Test Note"
},
"event_time": "2019-09-06 15:46:00.271062"
}
Order Note Updated Webhook
This webhook will notify your integration whenever a note has been updated.
{
"event_type": "order_note_updated",
"event_data": {
"id": "5d7274b95d0e2d0062aa2994",
"created": "2019-09-06 15:01:13.617000",
"status": "Finding Appraisers",
"note": "Testing"
},
"event_time": "2019-09-06 15:47:19.320824"
}
Order Note Deleted Webhook
This webhook will notify your integration whenever a note has been deleted.
{
"event_type": "order_note_deleted",
"event_data": {
"id": "5d7274b95d0e2d0062aa2994",
"created": "2019-09-06 15:01:13.617000",
"status": "Finding Appraisers",
"note_id": "8837b86b-c87f-4521-a78c-f5c8d5151383"
},
"event_time": "2019-09-06 15:50:22.125242"
}
Order Reassigned Webhook
This webhook will notify your integration whenever an order has been reassigned to a new appraiser.
{
"event_type": "order_reassigned",
"event_data": {
"id": "5d2f6991d648010006819caf",
"status": "Order Reassigned",
"created": "2018-08-23 17:28:04.723000"
},
"event_time": "2019-03-17 12:00:00"
}
Order Cancelled Webhook
This webhook will notify your integration whenever an order has been cancelled.
{
"event_type": "order_cancelled",
"event_data": {
"id": "5d2f6991d648010006819caf",
"status": "Order Canceled",
"created": "2018-08-23 17:28:04.723000"
},
"event_time": "2019-03-17 12:00:00"
}
Lender Attention Required
This webhook will notify your integration whenever lender attention is required.
The event data is an object with the attributes below.
Event data attributes
Attribute | Description |
---|---|
id | Order unique identifier. |
status | The current status of the order. |
created | Datetime string representation of when the order was created. |
lender_attention_required_reason | An explanation of why attention is needed on a specific order. |
{
"event_type": "lender_attention_required",
"event_data": {
"id": "5d2f6991d648010006819caf",
"status": "Accepted",
"created": "2021-01-19 20:37:36.812000",
"lender_attention_required_reason": "CONSUMER_DELIVERY_FAILED"
},
"event_time": "2021-01-19 20:50:39.336352"
}
Revision Created Webhook
This webhook will notify your integration that a revision has been created by a lender on an order.
{
"event_type": "revision_created",
"event_data": {
"order_id": "8f76c5c7c84d6c2daad9dd24",
"revision_id": "02875ec5-89f0-4818-99b2-c751995203ee",
"resolved": null,
"created": "2019-09-03 17:57:53.277345",
"text": "Testing",
"title": "Test"
},
"event_time": "2019-09-03 17:57:55.809861"
}
Revision Updated Webhook
This webhook will notify your integration that a revision has been updated on an order.
{
"event_type": "revision_updated",
"event_data": {
"order_id": "8f76c5c7c84d6c2daad9dd24",
"revision_id": "8f76c5c7baa36c2daad9dd24",
"resolved": null,
"created": "2019-09-03 17:57:53.277345",
"text": "Testing",
"title": "Test"
},
"event_time": "2019-03-17 12:00:00"
}
Revision Resolved Webhook
This webhook will notify your integration that a revision has been resolved on an order.
{
"event_type": "revision_resolved",
"event_data": {
"order_id": "8f76c5c7c84d6c2daad9dd24",
"revision_id": "c38582ae-4123-4908-90d0-6c13e579e7e5",
"resolved": "2019-09-05 14:21:02.112000",
"created": "2019-09-05 14:21:02.112000",
"text": "",
"title": "Test"
},
"event_time": "2019-09-05 15:00:58.658403"
}
Revision Unresolved Webhook
This webhook will notify your integration that a revision has been unresolved on an order.
{
"event_type": "revision_unresolved",
"event_data": {
"order_id": "8f76c5c7c84d6c2daad9dd24",
"revision_id": "c38582ae-4123-4908-90d0-6c13e579e7e5",
"resolved": null,
"created": "2019-09-05 14:21:02.112000",
"text": "",
"title": "Test"
},
"event_time": "2019-09-05 15:00:58.658403"
}
Order Report Received
This webhook will notify your integration when a new submission has been received on an order.
{
"event_type": "order_report_received",
"event_data": {
"id": "5d2f6991d648010006819caf",
"submission_version": "1",
"created": "2018-08-23 17:28:04.723000"
},
"event_time": "2018-08-24 19:23:04.723000"
}
Order Ready for Review
This webhook will notify your integration when an order's review is ready.
{
"event_type": "order_ready_for_review",
"event_data": {
"id": "622b787b1179578f61e46071",
"created": "2022-03-11 16:27:39.159000",
"status": "Under Review"
},
"event_time": "2022-03-11 16:27:39.159000"
}
Order Report Sent
This webhook will notify your integration that an order's report has been sent to one of the consumers on the order.
{
"event_data": "order_report_sent",
"event_data": {
"order_id": "5d2f6991d648010006819caf",
"status": "Report Sent",
"created": "2018-08-23 17:28:04.723000"
}
}
Order Submission Matched Exclusionary List
This webhook will notify your integration that a submission on an order was completed by an appraiser in your exclusionary list.
{
"event_data": "order_submission_matched_exclusionary_list",
"event_data": {
"order_id": "5d2f6991d648010006819caf",
"status": "Submitted",
"created": "2018-08-23 17:28:04.723000"
}
}
Order Submitted To UCDP
This webhook will notify your integration that a submission has been uploaded to UCDP.
{
"event_type": "order_submitted_to_ucdp",
"event_data": {
"loan_id": "5d726daf5d0e2d003476b1fc",
"loan_number": "9060039",
"related_order": "5d72b2502bfcb20313ceacb3",
"created": "2019-09-06 14:31:10.879000"
},
"event_time": "2019-09-06 19:27:17.555055"
}
Order Submitted To EAD
This webhook will notify your integration that a submission has been uploaded to EAD.
{
"event_type": "order_submitted_to_ead",
"event_data": {
"loan_id": "5d726daf5d0e2d003476b1fc",
"loan_number": "9060039",
"related_order": "5d72b2502bfcb20313ceacb3",
"created": "2019-09-06 14:31:10.879000"
},
"event_time": "2019-09-06 19:27:17.555055"
}
Fee Escalation Created
This webhook will notify your integration that a fee escalation has been created.
{
"event_type": "fee_escalation_created",
"event_data": {
"fee_escalation_id": "c3adad5f-1d59-49bf-865f-ea16562d9fd7",
"order_id": "5d72b2502bfcb20313ceacb3",
"requested_fee": 650.00,
"requested_due_date": "2020-05-28 15:17:20.338952",
"reason": "This is a comment"
},
"event_time": "2020-05-28 15:17:20.338952"
}
Fee Escalation Request Accepted
This webhook will notify your integration that a fee escalation request has been accepted.
{
"event_type": "fee_escalation_request_accepted",
"event_data": {
"initial_fee": 925,
"current_fee": 950,
"fee_escalation_id": "c3adad5f-1d59-49bf-865f-ea16562d9fd7",
"order_id": "5eced312f6d97d01efc93d88"
},
"event_time": "2020-05-28 15:17:20.338952"
}
Fee Escalation Request Denied
This webhook will notify your integration that a fee escalation request has been denied.
{
"event_type": "fee_escalation_request_denied",
"event_data": {
"fee_escalation_id": "eae69691-9df7-4a77-8d73-f8eabb1ffd56",
"order_id": "5eced312f6d97d01efc93d88"
},
"event_time": "2020-05-28 15:16:00.498833"
}
Lender Payment Webhooks
These webhooks are triggered when the lender interacts with the vendor payments. They are available for both vendors and lenders.
Vendor Payment Created Webhook
This webhook will notify your integration whenever a vendor payment has been created.
{
"event_type": "vendor_payment_created",
"event_data": {
"order_id": "5c4f16764672bb00105ea6y9",
"payment_id": "5d7280eb2bfcb2025bf267fb",
"amount": "10.00",
"description": "USNS Chang, Lake Christianshire, VIRGINIA"
},
"event_time": "2019-09-06 15:53:20.000306"
}
Vendor Payment Updated Webhook
This webhook will notify your integration whenever a vendor payment is edited.
{
"event_type": "vendor_payment_updated",
"event_data": {
"order_id": "5c4f16764672bb00105ea6y9",
"payment_id": "bad69636-346a-490c-ad10-15bb76fea67e",
"amount": "34.86",
"description": "USNS Chang, Lake Christianshire, VIRGINIA"
},
"event_time": "2019-09-04 18:16:07.357064"
}
Vendor Payment Deleted Webhook
This webhook will notify your integration whenever a vendor payment is deleted.
{
"event_type": "vendor_payment_deleted",
"event_data": {
"order_id": "5c4f16764672bb00105ea6y9",
"payment_id": "3ac2780e-ee93-4bec-b171-504881c616b3",
"amount": "34.86",
"description": "USNS Chang, Lake Christianshire, VIRGINIA"
},
"event_time": "2019-09-04 18:20:28.317856"
}
Vendor Payment Delivered Webhook
This webhook will notify your integration whenever a vendor payment has been delivered to the appraiser.
{
"event_type": "vendor_payment_delivered",
"event_data": {
"order_id": "5c4f16764672bb00105ea6y9",
"payment_id": "5d7280eb2bfcb2025bf267fb",
"amount": "10.00",
"description": "USNS Chang, Lake Christianshire, VIRGINIA"
},
"event_time": "2019-09-06 15:53:20.000306"
}
Lender eVault Webhooks
These webhooks pertain to the eVault and our file storage system. They are available for both vendors and lenders.
eVault Webhook
This webhook will notify your integration whenever a document has been uploaded by a vendor to one of your orders.
{
"event_type": "evault_uploaded",
"event_data": {
"order_id": "5c4f16764672bb00105ea6y9",
"evault_id": "5c4f16764672bb00105ea6y2",
"document_id": "5c4f16764672bb00105ea2c4",
"created": "2019-03-17 12:00:00"
},
"event_time": "2019-03-17 12:00:00"
}
Lender Conversation Webhooks
These webhooks pertain to conversations and the messages that belong to them. They are available for vendors and lenders.
Message Received Webhook
This webhook will notify your integration whenever a message has been received from a client on one of your orders.
{
"event_type": "new_message",
"event_data": {
"order_id": "5c4f16764672bb00105ea6y9",
"conversation_id": "5d6e89e01fe14c000b32e868",
"message": "Reggora Rocks!",
"time_stamp": "2019-04-11 15:00:00"
},
"event_time": "2019-04-11 15:00:00"
}
Message Sent Webhook
This webhook will notify your integration whenever a message has been sent to a client on one of your orders.
{
"event_type": "message_sent",
"event_data": {
"order_id": "5c4f16764672bb00105ea6y9",
"conversation_id": "5d6e89e01fe14c000b32e868",
"message_id": "448556a8-2e76-4030-9358-e7a099d8963e",
"message": "Reggora Rocks!",
"time_stamp": "2019-04-11 15:00:00"
},
"event_time": "2019-04-11 15:00:00"
}
User Webhooks
These webhooks pertain to the users added, edited, and removed from your integration accounts. They are available for vendors and lenders.
User Created Webhook
This webhook will notify your integration whenever a new user has been created.
{
"event_type": "user_created",
"event_data": {
"id": "5232e23efqd12eg53232",
"email": "newuser@example.com",
"firstname": "Jerry",
"lastname": "Seinfeld",
"role": "admin",
"created": "2019-03-17 12:00:00"
},
"event_time": "2019-03-17 12:00:00"
}
User Updated Webhook
This webhook will notify your integration whenever a user has been updated.
{
"event_type": "user_updated",
"event_data": "5232e23efqd12eg53232",
"event_time": "2019-03-17 12:00:00"
}
User Deleted Webhook
This webhook will notify your integration whenever a user has been deleted.
{
"event_type": "user_deleted",
"event_data": "5d0bb0423afee00034be22dc",
"event_time": "2019-09-03 19:59:40.903714"
}
User Invited Webhook
This webhook will notify your integration whenever a user has been invited.
{
"event_type": "user_invited",
"event_data": {
"id": "5d6ec84d696558081d447e29",
"email": "fake@reggora.com",
"firstname": "Fake",
"lastname": "User",
"role": "Admin",
"created": "2019-03-17 12:00:00"
},
"event_time": "2019-09-03 20:08:46.421038"
}
Lender Vendor Webhooks
These webhooks pertain to your integrations interaction and activity with vendors. They are available for integrations.
Vendor Created Webhook
This webhook will notify your integration whenever a vendor has been created.
{
"event_type": "vendor_invited",
"event_data": "5d7012929e5e66006244d947",
"event_time": "2019-09-04 19:37:55.044381"
}
Vendor CSV Uploaded Webhook
This webhook will notify your integration whenever vendors are invited from a csv upload.
{
"event_type": "vendor_csv_uploaded",
"event_data": [
"5d72782b5d0e2d00be590a08",
"5d72782c5d0e2d00be590a0c"
],
"event_time": "2019-09-06 15:15:57.332117"
}
Vendor Updated Webhook
This webhook will notify your integration whenever a vendor has been updated.
{
"event_type": "vendor_updated",
"event_data": "5c7024c1f72d830020288ad7",
"event_time": "2019-09-04 15:13:57.010377"
}
Vendor Deleted Webhook
This webhook will notify your integration whenever a vendor has been removed from your panel.
{
"event_type": "vendor_deleted",
"event_data": "5c7024c1f72d830020288ad7",
"event_time": "2019-09-04 15:13:57.010377"
}
Exclusionary List Added Webhook
This webhook will notify your integration whenever an appraiser has been added to an exclusionary list.
{
"event_type": "exclusionary_list_added",
"event_data": {
"excluded": [
{
"id": "100*MA",
"name": ["Test User"],
"license_number": "100",
"license_state": "MA"
}
]
},
"event_time": "2019-09-04 15:26:10.813081"
}
Exclusionary List Uploaded Webhook
This webhook will notify your integration whenever an exclusionary list has been uploaded and added to your list.
{
"event_type": "exclusionary_list_uploaded",
"event_data": {
"excluded": [
{
"id": "RD45555*FL",
"name": [
"Appraisal Central"
],
"license_number": "RD45555",
"license_state": "FL"
},
{
"id": "3000MHB*MD",
"name": [
"David Beckham"
],
"license_number": "3000MHB",
"license_state": "MD"
}
]
},
"event_time": "2019-09-04 17:09:25.044266"
}
Exclusionary List Removed Webhook
This webhook will notify your integration whenever a member has been removed from your exclusionary list. It will display the remaining exclusions.
{
"event_type": "exclusionary_list_removed",
"event_data": {
"excluded": []
},
"event_time": "2019-09-04 15:28:12.324693"
}
Lender Branch Webhooks
These webhooks pertain to branches on your lender's integration account. They are available for lenders only.
Branch Created Webhook
This webhook will notify your integration whenever a branch has been created on your lender.
{
"event_type": "branch_created",
"event_data": {
"branch_id": "5d6ecfdb69655808d5b3d012",
"branch_identifier": "test_branch_1",
"name": "test branch",
"address": "123 Main St",
"city": "Boston",
"state": "MA",
"ZIP": "90210",
"branch_classification": "retail",
"is_joint_venture": false,
"contact_phone_number": "555-555-5555",
"contact_email": "email@testreggora.com",
"loan_officers": [
{
"id": "6373c8fcd74957d911629dcf",
"email": "email@testreggora.com",
"firstname": "Homer",
"lastname": "Simpson",
"phone_number": "1234567890",
"created": "2022-11-15 17:15:50.307000"
}
],
"parent_branch_identifier": "test_branch_2",
"exists_in_hierarchy": true
},
"event_time": "2022-11-15 17:15:50.307000"
}
Branch Updated Webhook
This webhook will notify your integration whenever a branch has been updated on your lender, including soft deletes. If we are deleting a branch, then we only send the branch_id, branch_identifier, and branch_name in the event data. Otherwise, the branch data in its entirety will be sent.
{
"event_type": "branch_updated",
"event_data": {
"branch_id": "5d6ecfdb69655808d5b3d012",
"branch_identifier": "TBNT",
"branch_name": "Test Branch New Test"
},
"event_time": "2019-09-03 20:41:12.525847"
},
{
"event_type": "branch_updated",
"event_data": {
"branch_id": "5d6ecfdb69655808d5b3d012",
"branch_identifier": "test_branch_1",
"name": "test branch",
"address": "123 Main St",
"city": "Boston",
"state": "MA",
"ZIP": "90210",
"branch_classification": "retail",
"is_joint_venture": false,
"contact_phone_number": "555-555-5555",
"contact_email": "email@testreggora.com",
"loan_officers": [
{
"id": "6373c8fcd74957d911629dcf",
"email": "email@testreggora.com",
"firstname": "Homer",
"lastname": "Simpson",
"phone_number": "1234567890",
"created": "2022-11-15 17:15:50.307000"
}
],
"parent_branch_identifier": "test_branch_2",
"exists_in_hierarchy": true
},
"event_time": "2022-11-15 17:15:50.307000"
}
Branch Zone Updated Webhook
This webhook will notify your integration whenever a branch's zone allocation methods have been updated on the lender side.
{
"event_type": "branch_zones_updated",
"event_data": {
"branch_id": "5d6ecfdb69655808d5b3d012",
"branch_identifier": "test_branch_1",
"name": "test branch",
"address": "123 Main St",
"city": "Boston",
"state": "MA",
"ZIP": "90210",
"branch_classification": "retail",
"is_joint_venture": false,
"contact_phone_number": "555-555-5555",
"contact_email": "email@testreggora.com",
"loan_officers": [
{
"id": "6373c8fcd74957d911629dcf",
"email": "email@testreggora.com",
"firstname": "Homer",
"lastname": "Simpson",
"phone_number": "1234567890",
"created": "2022-11-15 17:15:50.307000"
}
],
"parent_branch_identifier": "test_branch_2",
"exists_in_hierarchy": true
},
"event_time": "2019-09-06 15:33:02.383468"
}
Branch Vendor Added Webhook
This webhook will notify your integration whenever a branch has had a vendor added to it on your lender.
{
"event_type": "branch_vendor_added",
"event_data": {
"branch_id": "5d6ecfdb69655808d5b3d012",
"branch_identifier": "test_branch_1",
"name": "test branch",
"address": "123 Main St",
"city": "Boston",
"state": "MA",
"ZIP": "90210",
"branch_classification": "retail",
"is_joint_venture": false,
"contact_phone_number": "555-555-5555",
"contact_email": "email@testreggora.com",
"loan_officers": [
{
"id": "6373c8fcd74957d911629dcf",
"email": "email@testreggora.com",
"firstname": "Homer",
"lastname": "Simpson",
"phone_number": "1234567890",
"created": "2022-11-15 17:15:50.307000"
}
],
"parent_branch_identifier": "test_branch_2",
"exists_in_hierarchy": true,
"vendor_ids":["5c7024c1f72d830020288ad7", "5c7024e6f72d830020288adb"]
},
"event_time": "2019-09-04 14:58:32.994752"
}
Branch Vendor Removed Webhook
This webhook will notify your integration whenever a branch has had a vendor removed from it on your lender.
{
"event_type": "branch_vendor_removed",
"event_data": {
"branch_id": "5d6ecfdb69655808d5b3d012",
"branch_identifier": "test_branch_1",
"name": "test branch",
"address": "123 Main St",
"city": "Boston",
"state": "MA",
"ZIP": "90210",
"branch_classification": "retail",
"is_joint_venture": false,
"contact_phone_number": "555-555-5555",
"contact_email": "email@testreggora.com",
"loan_officers": [
{
"id": "6373c8fcd74957d911629dcf",
"email": "email@testreggora.com",
"firstname": "Homer",
"lastname": "Simpson",
"phone_number": "1234567890",
"created": "2022-11-15 17:15:50.307000"
}
],
"parent_branch_identifier": "test_branch_2",
"exists_in_hierarchy": true,
"vendor_id": "5c701a2ff72d830020288ab0"
},
"event_time": "2019-09-04 15:10:00.826984"
}
Lender Product Webhooks
These webhooks pertain to lender products. They are available for lenders only.
Product Created Webhook
This webhook will notify your integration whenever a product is created.
{
"event_type": "product_created",
"event_data": "5d6ff0a271cb1f00bfda19b6",
"event_time": "2019-09-04 17:13:07.176457"
}
Product Updated Webhook
This webhook will notify your integration whenever a product is updated.
{
"event_type": "product_updated",
"event_data": {
"product_id": "5c704514f72d830020288b3a",
"product_name": "Test Product",
"amount": "1002.00"
},
"event_time": "2019-09-04 17:14:01.433414"
}
Product Deleted Webhook
This webhook will notify your integration whenever a product is deleted.
{
"event_type": "product_deleted",
"event_data": "5d518394425e420061bd135b",
"event_time": "2019-09-04 17:15:39.645117"
}
Product Note Created Webhook
This webhook will notify your integration whenever a product note is created.
{
"event_type": "product_note_created",
"event_data": {
"product_id": "5c704514f72d830020288b3a",
"product_name": "Test Product",
"note_id": "ad21375a-0146-4fdd-a89b-d4d550e903df"
},
"event_time": "2019-09-04 17:19:05.191973"
}
Product Note Updated Webhook
This webhook will notify your integration whenever a product note is edited.
{
"event_type": "product_note_updated",
"event_data": {
"product_id": "5c704514f72d830020288b3a",
"product_name": "Test Product",
"note_id": "ad21375a-0146-4fdd-a89b-d4d550e903df"
},
"event_time": "2019-09-04 17:20:59.379658"
}
Product Note Deleted Webhook
This webhook will notify your integration whenever a product note is deleted.
{
"event_type": "product_note_deleted",
"event_data": "ad21375a-0146-4fdd-a89b-d4d550e903df",
"event_time": "2019-09-04 17:22:41.757001"
}
Product Document Uploaded
This webhook will notify your integration whenever an included form has been added to a product.
{
"event_type": "product_document_uploaded",
"event_data": {
"product_id": "5c704514f72d830020288b3a",
"product_name": "Test Product",
"document_id": "2d3c4f5c-cf3a-11e9-840a-0242a4120002",
"document_name": "test_upload.pdf"
},
"event_time": "2019-09-04 17:33:58.806943"
}
Product Document Deleted
This webhook will notify your integration whenever an included form has been removed from a product. This will return the document id.
{
"event_type": "product_document_deleted",
"event_data": "bb72c7fe-5ad9-11e9-a403-0242ac120002",
"event_time": "2019-09-04 17:31:52.112822"
}
Company Order Webhooks
These webhooks pertain to orders and the status of those orders for an appriasal companies.
Fee escalation accept
This webhook will notify your integration whenever a fee escalation has been accepted for an appraisal company.
{
"event_type": "fee_escalation_request_accepted",
"event_data": {
"initial_fee": 3100,
"current_fee": 6100,
"fee_escalation_id": "abc84b8a-3c78-4eaf-94da-5777852f7183",
"order_id": "5fad820998f433014ef2abf6"
},
"event_time": "2020-11-12 20:50:30.937437"
}
Fee escalation deny
This webhook will notify your integration whenever a fee escalation has been deny for an appraisal company.
{
"event_type": "fee_escalation_request_denied",
"event_data": {
"fee_escalation_id": "51c88a4b-26f3-4cc4-bc7f-f0922aebb8e9",
"order_id": "5fa443bcf7e5530c945d951a"
},
"event_time": "2020-11-12 16:30:39.222568"
}
Counter offer accept
This webhook will notify your integration whenever a Counter offer has been accepted for an appraisal company.
{
"event_type": "counter_offer_accepted",
"event_data": {
"due_date": "2020-11-17 12:00:00",
"current_fee": "4000.0",
"order_id": "5fad820998f433014ef2abf6"
},
"event_time": "2020-11-12 20:48:11.338204"
}
Counter offer deny
This webhook will notify your integration whenever a Counter offer has been denied for an appraisal company.
{
"event_type": "counter_offer_denied",
"event_data": {
"order_id": "5fad820998f433014ef2abf6"
},
"event_time": "2020-11-12 20:48:11.338204"
}
Consumer Webhooks
These webhooks pertain to consumers and consumer payments. They are available for lenders only.
Consumer Payment Created Webhook
This webhook will notify your integration whenever a consumer payment is generated.
{
"event_type": "consumer_payment_created",
"event_data": {
"order_id": "5c704514f72d830020288b3a",
"payment_id": "bad69636-346a-490c-ad10-15bb76fea67e",
"amount": "34.86",
"description": "USNS Chang, Lake Christianshire, VIRGINIA"
},
"event_time": "2019-09-04 17:57:16.903718"
}
Consumer Payment Updated Webhook
This webhook will notify your integration whenever a consumer payment is edited.
{
"event_type": "consumer_payment_updated",
"event_data": {
"order_id": "5c704514f72d830020288b3a",
"payment_id": "bad69636-346a-490c-ad10-15bb76fea67e",
"amount": "34.86",
"description": "USNS Chang, Lake Christianshire, VIRGINIA"
},
"event_time": "2019-09-04 18:16:07.357064"
}
Consumer Payment Deleted Webhook
This webhook will notify your integration whenever a consumer payment is deleted.
{
"event_type": "consumer_payment_deleted",
"event_data": {
"order_id": "5c704514f72d830020288b3a",
"payment_id": "bad69636-346a-490c-ad10-15bb76fea67e",
"amount": "34.86",
"description": "USNS Chang, Lake Christianshire, VIRGINIA"
},
"event_time": "2019-09-04 18:17:00.464056"
}
Consumer Created Webhook
This webhook will notify your integration whenever a consumer has been added to a loan file.
{
"event_type": "consumer_created",
"event_data": {
"id": "366b4814-c75f-4437-b035-900dcabfd866",
"full_name": "Fake Borrower",
"email": "fake@reggora.com",
"role": "borrower"
},
"event_time": "2019-09-04 14:23:52.681213"
}
Consumer Updated Webhook
This webhook will notify your integration whenever a consumer has been edited.
{
"event_type": "consumer_updated",
"event_data": {
"id": "aa678c59-c18e-4493-a9fd-ebac14df713b"
},
"event_time": "2019-09-05 14:18:30.511737"
}
Vendor API
Vendor Introduction
Welcome to the Vendor API! You can use our API to access Reggora endpoints which get information on your orders, conversations, and eVaults.
You can view code examples in the dark area to the right. If you are using the development environment then you will need to use the base url:
https://sandbox.reggora.io/vendor/
Vendor Authentication
To authorize, use this code:
import requests
# The login request does not require the integration API key
response = requests.post('https://sandbox.reggora.io/vendor/auth', data={'username': 'username/email', 'password': 'password'})
Make sure to replace
username/email
andpassword
with your Reggora Lender Portal login information.
The Reggora API uses JWT bearer tokens as well as a personal API key to authorize all requests.
The Reggora API expects for your API integration key as well as the JWT bearer token to be included in all API requests to the server in a header that looks like the following:
Authorization: Bearer {token}
integration: {api-integration-key}
If making requests to the development server, you will need to use your development specific credentials and development specific API key.
Client Management
Vendor Get Client List
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/vendor/clients', headers=headers)
The above command returns JSON structured like this:
{
"data": [
{
"id": "5c2e718cb61f76001adf9871",
"name": "Test Lender",
"address": "123 Main St",
"city": "Boston",
"zip": "022020",
"email": "test@lender.com",
"allow_counter_offer": true,
},
{
"id": "5d5ae5bb4f418c0009e09dfa",
"name": "Test Lender 2",
"address": "124 Main St",
"city": "Boston",
"zip": "022020",
"email": "test2@lender.com",
"allow_counter_offer": true,
},
// ...8 more
],
"status": 200
}
This endpoint retrieves list of the clients whose panel you belong to.
Vendor Get Product List By Client
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/vendor/products/<client_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": [
{
"id": "5df85c1ed608de00343d7122",
"description": "1004D - Appraisal Update",
"amount": "150.00",
"inspection_type": "interior",
"required_report_files": "pdf",
"requested_forms": [
"1004D - Appraisal Update"
]
},
{
"id": "5df85c1ed608de00343d715e",
"description": "1004D - Final Inspection",
"amount": "150.00",
"inspection_type": "interior",
"required_report_files": "xml",
"requested_forms": [
"1004D - Final Inspection"
]
},
{
"id": "5df85c1ed608de00343d715e",
"description": "1025",
"amount": "75.00",
"inspection_type": "interior",
"required_report_files": "both",
"requested_forms": [
"1025"
]
},
// ...8 more
],
"status": 200
}
This endpoint retrieves a list of a client's products.
Vendor Get Client Branches by ID
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/vendor/branches/<client_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": [
{
"branch_id": "5d936b765ed25e003424a3e5",
"branch_identifier": "BA",
"branch_name": "Branch A"
},
{
"branch_id": "5de9581f02c5580147af8586",
"branch_identifier": "2NDB",
"branch_name": "Second Branch"
},
{
"branch_id": "5de96cf58ba6a000345e10e7",
"branch_identifier": "B003",
"branch_name": "Branch Three"
}
],
"status": 200
}
}
This endpoint retrieves a list of a client's branches.
Order Management
Vendor Get Order By ID
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/vendor/order/<order_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
// This id corresponds to the order_id
"id": "5c2e718cb61f76001adf9871",
"status": "Inspection Completed",
"property_street": "123 New Address",
"property_city": "Brighton",
"property_state": "MA",
"property_zip": "02135",
"priority": "Rush",
"request_expiration": "2019-04-01T04:00:00.000Z",
"due_date": "2019-04-09T04:00:00.000Z",
"lender": {
"id": "5c2e718cb61f76001adf9871",
"name": "Reggora Bank .inc"
},
"loan_file": {
"id": "5d5ae5bb4f418c0009e09dfa",
"loan_number": "12646",
"occupancy_type":"Primary",
"attachment_type":"Detached",
"agency_case_number":"1ZabCd",
"loan_type":"USDA-RHS",
"number_of_units":"1",
"appraisal_type": "Purchase",
"number": "1000000001",
"du_case_file_id": "12345",
"lp_key_number": "67890"
},
"consumers": [{
"full_name": "Jo",
"role": "borrower",
"email": "borr@email.com",
"home_phone": "617-111-0002",
"cell_phone": "617-111-0001",
"work_phone": "617-111-0003",
"is_primary_contact": true
}, {
"full_name": "Nat",
"role": "coborrower",
"email": "coborr@email.com",
"home_phone": "617-222-0002",
"cell_phone": "617-222-0001",
"work_phone": "617-222-0003",
"is_primary_contact": false
}, {
"full_name": "Sam SellerAgent",
"role": "listing broker",
"email": "seller@agent.com",
"cell_phone": "781-777-0001",
"work_phone": "781-777-0002",
"is_primary_contact": false,
}, {
"full_name": "Bob BuyerAgent",
"role": "buyer broker",
"email": "buyer@agent.com",
"cell_phone": "978-999-0001",
"work_phone": "978-999-0002",
"is_primary_contact": false
}],
"schedule": [
{
"available_dates": [
{
"beginning": "2019-09-05 05:00:00",
"end": "2019-09-05 08:00:00"
},
],
"timezone": "-0400",
"consumer": "44dbed88-c374-4146-8818-07556c288727"
}
],
"evault": "5b27e86ecadaec00099825c8",
"contract_evault": "5b27e86ecadaec00099825c9",
"conversation": "5b27e8cdcadaec00099825ca",
"products": [{
"id": "5b27e8cdcadaes0f098235cb",
"description": "Single Family",
"forms": ["urar", "mc"],
"amount": 0,
"inspection_type": "interior"
}],
"submissions": [{
"created": "2018-11-05T15:32:07.738Z",
"pdf_report": "https://sandbox.reggora.io/vendor/submission/5c4f16764672bb00105ea5f9/1/pdf_report",
"xml_report": "https://sandbox.reggora.io/vendor/submission/5c4f16764672bb00105ea5f9/1/xml_report",
"invoice": "https://sandbox.reggora.io/vendor/submission/5c4f16764672bb00105ea5f9/1/invoice",
"version": 1,
}],
"revisions": [{
"id": "62c478b5-70ee-4307-bc25-acc3afd23c49",
"created": "2018-11-06T21:45:22.719Z",
"updated": "2018-11-06T21:45:22.719Z",
"resolved": "2019-03-19T08:01:32.457Z",
"text": "Hello,\nPlease request the vendor to add the co-borrower's name on the report\nThank you",
"title": "Revision 11.6.2018"
}],
"branch_identifier": "5db851297a6980000aa01206"
},
"status": 200
}
This endpoint retrieves a specific order by id.
HTTP Request
GET https://sandbox.reggora.io/vendor/order/<order_id>
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Vendor Get All Orders
This endpoint returns all of the orders that pertain to your vendor. The request takes a number of query parameters including offset, limit, and a status. Status acts as a filtering mechanism and if included the request will only return orders with that status.
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# Just an example
query_params = {
'offset': 0,
'limit': 10,
# you can filter by multiple statuses, separate with commas
'status': 'accepted,inspection_scheduled',
# possible filters: created, finding_appraisers, accepted, inspection_scheduled \
# inspection_completed, submitted, revision_requested
}
response = requests.get('https://sandbox.reggora.io/vendor/orders', params=query_params, headers=headers)
The above command returns JSON structured like this:
{
"data": {
"count": 10,
"orders": [
{
// This id corresponds to the order_id
"id": "5c2e718cb61f76001adf9871",
"status": "Inspection Completed",
"property_street": "123 New Address",
"property_city": "Brighton",
"property_state": "MA",
"property_zip": "02135",
"priority": "Rush",
"request_expiration": "2019-04-01T04:00:00.000Z",
"due_date": "2019-04-09T04:00:00.000Z",
"lender": {
"id": "5c2e718cb61f76001adf9871",
"name": "Reggora Bank .inc"
},
"loan_file": {
"occupancy_type":"Primary",
"attachment_type":"Detached",
"agency_case_number":"1ZabCd",
"loan_type":"USDA-RHS",
"number_of_units":"1",
"appraisal_type": "Purchase",
"number": "1000000001"
},
"consumers": [{
"full_name": "Jo",
"role": "borrower",
"email": "borr@email.com",
"home_phone": "617-111-0002",
"cell_phone": "617-111-0001",
"work_phone": "617-111-0003",
"is_primary_contact": true
}, {
"full_name": "Nat",
"role": "coborrower",
"email": "coborr@email.com",
"home_phone": "617-222-0002",
"cell_phone": "617-222-0001",
"work_phone": "617-222-0003",
"is_primary_contact": false
}, {
"full_name": "Sam SellerAgent",
"role": "listing broker",
"email": "seller@agent.com",
"cell_phone": "781-777-0001",
"work_phone": "781-777-0002",
"is_primary_contact": false,
}, {
"full_name": "Bob BuyerAgent",
"role": "buyer broker",
"email": "buyer@agent.com",
"cell_phone": "978-999-0001",
"work_phone": "978-999-0002",
"is_primary_contact": false
}],
"schedule": {
"available_dates": [
"2018-11-05T15:32:07.738Z",
"2018-11-06T15:32:07.738Z",
"2018-11-07T15:32:07.738Z"
]
},
"evault": "5b27e86ecadaec00099825c8",
"contract_evault": "5b27e86ecadaec00099825c9",
"conversation": "5b27e8cdcadaec00099825ca",
"products": [{
"id": "5b27e8cdcadaes0f098235cb",
"description": "Single Family",
"forms": ["urar", "mc"],
"amount": 0,
"inspection_type": "exterior"
}],
"submissions": [{
"created": "2018-11-05T15:32:07.738Z",
"pdf_report": "https://sandbox.reggora.io/vendor/submission/5c4f16764672bb00105ea5f9/1/pdf_report",
"xml_report": "https://sandbox.reggora.io/vendor/submission/5c4f16764672bb00105ea5f9/1/xml_report",
"invoice": "https://sandbox.reggora.io/vendor/submission/5c4f16764672bb00105ea5f9/1/invoice",
"additional_files": [
"document_id": "5b27e8cdcadaes0f098235cb",
"document_name": "test_document.pdf",
"upload_datetime": "2018-11-06T21:45:22.719Z"
],
"version": 1,
}],
"revisions": [{
"created": "2018-11-06T21:45:22.719Z",
"updated": "2018-11-06T21:45:22.719Z",
"lender_resolved": "2019-03-19T08:01:32.457Z",
"vendor_completed": "2019-03-18T08:01:32.457Z",
"text": "Hello,\nPlease request the vendor to add the co-borrower's name on the report\nThank you",
"title": "Revision 11.6.2018"
}],
"branch_identifier": "5db851297a6980000aa01206",
},
// ...9 More
]
},
"status": 200
}
Accept Order
This endpoint is used to accept an Order.
HTTP Request
PUT https://sandbox.reggora.io/vendor/order/<order_id>/accept
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.put('https://sandbox.reggora.io/vendor/order/<order_id>/accept', headers=headers)
The above command returns JSON structured like this:
{
// This is the order id
"data": "5c1c05f532b211000e15302a",
"status": 200
}
Counter Offer
This endpoint is used to send a counter offer the lender. If the offer is accepted then the order will be assigned to your company. Send the request with your desired changes in the body of the request.
HTTP Request
PUT https://sandbox.reggora.io/vendor/order/<order_id>/counter
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
due_date | The date that you would like the lender to change the order due date to. Date must be in UTC-format(Y-m-dTH:M:SZ) | False |
fee | The fee that you would like the lender to change the order fee to | False |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'due_date': '2018-12-19T12:00:00Z',
'fee': 345.67
}
response = requests.put('https://sandbox.reggora.io/vendor/order/<order_id>/counter', headers=headers, data=body)
The above command returns JSON structured like this:
{
// This is the order id
"data": "5c1c05f532b211000e15302a",
"status": 200
}
Fee Escalation
This endpoint is used for fee escalation to the lender. If the new fee is accepted then the lender pays the additional fee to your company. Send the request with your desired changes in the body of the request.
HTTP Request
POST https://sandbox.reggora.io/vendor/order/<order_id>/fee-escalation
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
fee | The fee that you would like the lender to change the order fee to | True |
reason | The reason why you want the lender to change the order fee | False |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'fee': 345.67
}
response = requests.post('https://sandbox.reggora.io/vendor/order/<order_id>/fee-escalation', headers=headers, data=body)
The above request returns a JSON response like this:
{
"data": "Your fee escalation request is pending.",
"status": 200
}
New Due Date Request
This endpoint is used to request for a new due date from the lender for an order. If the new due date is accepted, the order is updated with the new due date. Send the request with your desired changes in the body of the request.
HTTP Request
POST https://sandbox.reggora.io/vendor/order/<order_id>/new-due-date-request
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
due_date | The date that you would like the lender to change the order due date to. Date must be in UTC-format(Y-m-dTH:M:S) | True |
reason | The reason why you want the lender to change the due date | False |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'due_date': '2018-12-19T12:00:00',
}
response = requests.post('https://sandbox.reggora.io/vendor/order/<order_id>/new-due-date-request', headers=headers, data=body)
The above request returns a JSON response like this:
{
"data": "Your new due date request is pending.",
"status": 200
}
Fee Escalation and New Due Date Request
This endpoint is used to request fee escalation and new due date from the lender for an order. If the escalated fee and requested new due date is accepted, the order is updated with the escalated fee and requested due date. Send the request with your desired changes in the body of the request.
HTTP Request
POST https://sandbox.reggora.io/vendor/order/<order_id>/fee-date-escalation
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
due_date | The date that you would like the lender to change the order due date to. Date must be in UTC-format(Y-m-dTH:M:S) | True |
fee | The fee that you would like the lender to change the order fee to | True |
reason | The reason why you want the lender to change the order fee and the due date | False |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'due_date': '2018-12-19T12:00:00Z',
'fee': 345.67
}
response = requests.post('https://sandbox.reggora.io/vendor/order/<order_id>/fee-date-escalation', headers=headers, data=body)
The above request returns a JSON response like this:
{
"data": "Your fee escalation and new due date request is pending.",
"status": 200
}
Deny Order
This endpoint is used to deny an Order. The deny_reason field is required.
HTTP Request
PUT https://sandbox.reggora.io/vendor/order/<order_id>/deny
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
deny_reason | The reason for denying an order | False |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# In the deny case
body = {
'deny_reason': 'I am on vacation until next Tuesday'
}
response = requests.put('https://sandbox.reggora.io/vendor/order/<order_id>/deny', headers=headers, data=body)
The above command returns JSON structured like this:
{
// This is the order id
"data": "5c1c05f532b211000e15302a",
"status": 200
}
Set Inspection Date
This endpoint is used to set the inspection date on an order. The body of the request takes one key value pair, inspection_date and a datetime.
HTTP Request
PUT https://sandbox.reggora.io/vendor/order/<order_id>/set_inspection
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
inspection_date | UTC formatted date of the inspection (Using TZ formatting). | True |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'inspection_date': '2019-04-11T21:00:00Z'
}
response = requests.put('https://sandbox.reggora.io/vendor/order/<order_id>/set_inspection', headers=headers, data=body)
The above command returns JSON structured like this:
{
// This is the order id
"data": "5c1c05f532b211000e15302a",
"status": 200
}
Complete Inspection
This endpoint is used to set the inspection date on an order. The body of the request takes an optional key value pair, inspection_completed and a datetime.
HTTP Request
PUT https://sandbox.reggora.io/vendor/order/<order_id>/complete_inspection
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
inspection_completed | UTC formatted date the inspection was completed (Using TZ formatting). | False |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'inspection_completed': '2019-04-11T21:00:00Z'
}
response = requests.put('https://sandbox.reggora.io/vendor/order/<order_id>/complete_inspection', headers=headers, data=body)
The above command returns JSON structured like this:
{
// This is the order id
"data": "5c1c05f532b211000e15302a",
"status": 200
}
Upload Submission
This endpoint is used to upload a Submission to an Order. A PDF file is required however an XML file is optional. Additionally, either an invoice number or an invoice file (PDF) must be included in the body of the request.
HTTP Request
POST https://sandbox.reggora.io/vendor/submission/<order_id>
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
pdf_file | PDF file | True |
xml_file | XML file | False |
invoice_number | The number for the corresponding invoice | True if no invoice_file |
invoice_file | The invoice file | True if no invoice_number |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# The file objects are either bytes or multi-part form data
body = {
"pdf_file": (BytesIO(b'1,2,3,4'), 'test_file.pdf'), # Required
"xml_file": (BytesIO(b'1,2,3,4'), 'test_file.xml'), # Optional
# One of the following is required
"invoice_number": "12345",
"invoice_file": (BytesIO(b'1,2,3,4'), 'test_invoice.pdf')
}
response = requests.post('https://sandbox.reggora.io/vendor/submission/<order_id>', headers=headers, data=body)
# The response object will be base64
The above command returns JSON structured like this:
{
"data": "Your submission has been uploaded to this order",
"status": 200
}
Download Submission
This endpoint returns a specific document from a Submission on an Order.
HTTP Request
GET https://sandbox.reggora.io/vendor/submission/<order_id>/<submission_version>/<document_type>
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
submission_version | Version of the submissions you want to download. |
document_type | The specific dobument type you want to download. The options are pdf, xml, or invoice. |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# Example:
# https://sandbox.reggora.io/vendor/submission/5c33c716681f110034effc73/1/pdf
# This request would return the pdf document on the first
# submission from the order with the id `5c33c716681f110034effc73`
order_id = '5c33c716681f110034effc73'
submission_version = 1
document_type = 'pdf'
response = requests.get(
'https://sandbox.reggora.io/vendor/submission/{}/{}/{}'.format(order_id, submission_version, document_type),
headers=headers, data=body)
The above command returns a file object. The file sending is implemented with the flask send_file extension.
Vendor Cancel Order
This endpoint will cancel an active order. It is optional to provide the reason for canceling as a message in the body of the request
HTTP Request
DELETE https://sandbox.reggora.io/vendor/order/<order_id>
URL Parameters
Parameter | Description |
---|---|
order_id | The ID of the order. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
message | The reason for cancelling the order | True |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
'message': 'I decided to quit the appraisal industry to follow my dreams of becoming a musician'
}
response = requests.delete('https://sandbox.reggora.io/vendor/order/<order_id>', headers=headers, data=body)
The above command returns JSON structured like this:
{
"data": "This order has been cancelled",
"status": 200
}
Conversation Management
Get Conversation
This endpoint will return a conversation, this includes the participants and the messages
HTTP Request
GET https://sandbox.reggora.io/vendor/conversation/<conversation_id>
URL Parameters
Parameter | Description |
---|---|
conversation_id | The ID of the conversation. |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/vendor/conversation/<conversation_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
// This is the conversation id
"id": "5c4f16764672bb00105ea5f9",
"messages": [
{
"id": "5c4f16764672bb00105ea5f9",
"message": "Reggora is the best!",
"sender": {
// This is the user id
"id": "5c4f16764672bb00105ea5f9",
"name": "Johnny Cash"
},
"sent_time": "2019-04-11 21:00:00"
}
// ...etc
// All messages in the conversation
]
},
"status": 200
}
Vendor Send Message
This endpoint adds a message to the conversation. The body takes one parameter, the message.
HTTP Request
POST https://sandbox.reggora.io/vendor/conversation/<conversation_id>
URL Parameters
Parameter | Description |
---|---|
conversation_id | The ID of the conversation. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
message | The message you want to send | True |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
"message": "Don't you just love reggora?"
}
response = requests.post('https://sandbox.reggora.io/vendor/conversation/<conversation_id>', headers=headers, data=body)
The above command returns JSON structured like this:
{
// This is the conversation id
"data": "5c4f16764672bb00105ea5f9",
"status": 200
}
eVault Management
Vendor Get eVault by ID
This endpoint returns an eVault object.
HTTP Request
GET https://sandbox.reggora.io/vendor/evault/<evault_id>
URL Parameters
Parameter | Description |
---|---|
evault_id | The ID of the evault. |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/vendor/evault/<evault_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": {
// This is the evault id
"id": "5c4f16764672bb00105ea5f9",
"documents": [{
"document_name": "test.pdf",
"document_id": "24bab39a-4404-11e8-ba10-02420a050006",
"upload_datetime": "2018-04-19T15:02:02.157Z"
}]
},
"status": 200
}
Vendor Get Document
This endpoint returns a file object specified by the evault ID and the document ID.
HTTP Request
GET https://sandbox.reggora.io/vendor/evault/<evault_id>/<document_id>
URL Parameters
Parameter | Description |
---|---|
evault_id | The ID of the eVault. |
document_id | The ID of the document. |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.get('https://sandbox.reggora.io/vendor/evault/<evault_id>/<document_id>', headers=headers)
The above command returns a file object. The file sending is implemented with the flask send_file extension.
Vendor Upload Document
This endpoint allows you to upload a document to an evault.
HTTP Request
PUT https://sandbox.reggora.io/vendor/evault/<evault_id>
URL Parameters
Parameter | Description |
---|---|
evault_id | The ID of the eVault. |
Request Body Parameters
Parameter | Description | Required |
---|---|---|
file | The file you want to upload | True |
file_name | The name of the file to be uploaded | False |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
body = {
"file": File, # Required
"file_name": "my_test.pdf" #This is an optional parameter
}
response = requests.put('https://sandbox.reggora.io/vendor/evault/<evault_id>', data=body, headers=headers)
The above command returns JSON structured like this:
{
// This is the document id
"data": "24bab39a-4404-11e8-ba10-02420a050006",
"status": 200
}
Vendor Delete Document
This endpoint removes a document from an evault.
HTTP Request
DELETE https://sandbox.reggora.io/vendor/evault/<evault_id>/<document_id>
URL Parameters
Parameter | Description |
---|---|
evault_id | The ID of the eVault. |
document_id | The ID of the document. |
import requests
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
response = requests.delete('https://sandbox.reggora.io/vendor/evault/<evault_id>/<document_id>', headers=headers)
The above command returns JSON structured like this:
{
"data": "Your document has been deleted",
"status": 200
}
Vendor Webhook Introduction
We offer a webhook integration to keep up to date on Reggora notifications.
Vendor Order Webhooks
These webhooks have to do with orders and the status of those orders.
Order Received Webhook
This webhook will notify your integration whenever a new order is created and sent to your appraiser.
{
"event_type": "new_order",
"event_data": {
"id": "5d7274b95d0e2d0062aa2994",
"created": "2019-09-06 15:01:13.617000",
"status": "Finding Appraisers"
},
"event_time": "2019-09-06 15:01:24.511932"
}
Order Updated Webhook
This webhook will notify your integration whenever an order is updated.
{
"event_type": "order_updated",
"event_data": {
"id": "5d6ebcfb696558079322c264",
"created": "2019-09-03 19:20:27.193000",
"status": "Inspection Scheduled"
},
"event_time": "2019-09-03 19:20:44.057271"
}
Order Placed on Hold Webhook
This webhook will notify your integration whenever an order has been placed on hold.
The event data is an object with the attributes below.
Event Data Attributes
Attribute | Description |
---|---|
id | Order unique identifier. |
status | The current status of the order. |
created | Datetime string representation of when the order was created. |
message | An explanation of why the order has been put on hold. |
{
"event_type": "order_placed_on_hold",
"event_data": {
"id": "5e9eee68561ed9000b6cc53e",
"created": "2020-04-21 13:00:24.439000",
"status": "Inspection Scheduled",
"message": "Missing required documents"
},
"event_time": "2020-04-22 13:29:08.912629"
}
{
"event_type": "order_placed_on_hold",
"event_data": {
"id": "5e9eee68561ed9000b6cc53e",
"created": "2020-04-21 13:00:24.439000",
"status": "Hold",
"message": "Missing required documents"
},
"event_time": "2020-04-22 13:29:11.912629"
}
Order Taken Off Hold Webhook
This webhook will notify your integration whenever an order has been removed from a held state.
{
"event_type": "order_removed_on_hold",
"event_data": {
"id": "5e9eee68561ed9000b6cc53e",
"created": "2020-04-21 13:00:24.439000",
"status": "Inspection Scheduled"
},
"event_time": "2020-04-22 13:34:35.505958"
}
{
"event_type": "order_removed_on_hold",
"event_data": {
"id": "5e9eee68561ed9000b6cc53e",
"created": "2020-04-21 13:00:24.439000",
"status": "Unhold"
},
"event_time": "2020-04-22 13:34:36.634373"
}
Order Cancelled Webhook
This webhook will notify your integration whenever an order has been cancelled.
{
"event_type": "order_cancelled",
"event_data": {
"id": "5e8381615f4aac000b077101",
"created": "2020-03-31 17:44:01.700000",
"status": "Cancelled"
},
"event_time": "2020-04-22 16:36:44.133376"
}
Revision Requested Webhook
This webhook will notify your integration that a revision has been requested on an order.
{
"event_type": "revision_created",
"event_data": {
"revision_id": "ee2d0b60-35d6-4467-811d-27364dffcf01",
"created": "2020-04-28 16:41:05.667017",
"resolved": null,
"text": "api",
"title": "API Test",
"order_id": "5e6ff89e8284e20008276a06"
},
"event_time": "2020-04-28 16:41:06.506132"
}
Reconsideration of Value Created Webhook
This webhook will notify your integration whenever a reconsideration of value has been requested on an order.
{
"event_type": "reconsideration_of_value_created",
"event_data": {
"order_id": "5e6ff89e8284e20008276a06",
"reason": "ROV",
"evault_id": "5ea85d14f25c1c000fd69c4c"
},
"event_time": "2020-04-28 16:43:00.860895"
}
Claim Time Expired Webhook
This webhook will notify your integration whenever an order's claim time has expired in your account.
{
"event_type": "claim_time_expired",
"event_data": {
"id": "5e9fc270cf1a06000b8c9d38",
"created": "2020-04-22 04:05:04.468000",
"status": "Finding Appraisers"
},
"event_time": "2020-04-22 12:06:17.293696"
}
Vendor eVault Webhooks
This webhook will notify your integration whenever a document has been uploaded by a vendor to one of your orders.
{
"event_type": "evault_file_uploaded",
"event_data": {
"order_id": "5c4f16764672bb00105ea6y9",
"evault_id": "5c4f16764672bb00105ea6y2",
"document_id": "5679d484-d808-11ea-afe3-02401eaec37b",
"created": "2019-03-17 12:00:00"
},
"event_time": "2019-03-17 12:00:00"
}
{
"event_type": "evault_uploaded",
"event_data": {
"id": "5c4f16764672bb00105ea6y2",
"documents": [{
"docuemnt_id": "5679d484-d808-11ea-afe3-02401eaec37b",
"evaut_id": "5c4f16764672bb00105ea6y2",
"document_name": "Contract.pdf",
"upload_datetime": "2019-03-17 12:00:00"
}]
},
"event_time": "2019-03-17 12:00:00"
}
Vendor Conversation Webhooks
These webhooks have to do with conversations and the messages that belong to them.
Message Received Webhook
This webhook will notify your integration whenever a message has been received from a client on one of your orders.
{
"event_type": "message_sent",
"event_data": {
"order_id": "5f318abc22f8af000f0c295b",
"conversation_id": "5f318ac2aeb817000678c105",
"message_id": "b752ead9-b1dd-473d-b1b2-ea8d9434f18d",
"message": "Hi, this is a message",
"time_stamp": "2020-08-18 18:08:16.600323"
},
"event_time": "2020-08-18 18:08:16.600339"
}
Product Webhooks
These webhooks have to do with lender products. We provide webhook events for creation, editing, and deletion of a product. The event data contains the unique product id for programatically syncing lender products with vendor.
Product Created
This webhook will notify your integration anytime a new product is added.
{
"event_type": "product_created",
"event_data": "5e98790e2b76e700134379e1",
"event_time": "2020-04-16 15:26:06.568873"
}
Product Updated
This webhook will notify your integration anytime an existing product is edited.
{
"event_type": "product_updated",
"event_data": {
"product_id": "5e5d61c200828540912a01f7",
"product_name": "Condo Appraisal Tier 2",
"amount": "500.00",
"up_to_amount": null
},
"event_time": "2020-03-23 20:28:18.980108"
}
Product Deleted
This webhook will notify your integration anytime an existing product is deleted.
{
"event_type": "product_deleted",
"event_data": "ecfda5dd64d8f2000c049023",
"event_time": "2020-05-31 21:40:01.180288"
}
Payment Webhooks
These webhooks will notify your integration when Reggora collects payment and also when funds are transferred to your Stripe account.
Reggora Collected Funds
This webhook will notify your integration when Reggora has collected funds.
{
"event_type": "reggora_collected_funds",
"event_data": {
"order_id": "5c4f16764672bb00105ea6y9",
"description": "10 Main Street, Boston MA 02210 (Suffolk County)",
"expected_transfer_amount": "300.00"
},
"event_time": "2022-01-30 15:53:20.000306"
}
Stripe Transfer
This webhook will notify your integration when Reggora transfers funds to your Stripe account.
{
"event_type": "stripe_funds_transferred_from_reggora",
"event_data": {
"order_id": "5c4f16764672bb00105ea6y9",
"amount": "10.00",
"description": "10 Main Street, Boston MA 02210 (Suffolk County)",
"stripe_transaction_id": "py_1KNeoB2e4503XnxukhcIZxH8"
},
"event_time": "2022-01-30 15:53:20.000306"
}
Errors
Both Reggora APIs use the following error codes:
Error Code | Meaning |
---|---|
400 | Bad Request -- Your request is invalid. |
401 | Unauthorized -- Your Bearer Token is invalid. |
403 | Invalid Parameter -- Either the URL parameters or the request body parameters are invalid. |
404 | Not Found -- The endpoint or object you are looking for does not exist. |
500 | Internal Server Error -- We had a problem with our server. Try again later. |