NAV
python

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 and password 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 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 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 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
email 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
email 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
}

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 not found.
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 not found.
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 not found.
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 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 not found.
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 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 and password 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.