Skip to content

Order Management

This endpoint retrieves a specific order by id.

GET https://sandbox.reggora.io/vendor/order/<order_id>

ParameterDescription
order_idThe ID of the order.
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 top-level id in the response corresponds to the order_id.

{
"data": {
"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",
"purchase_price": 549000.0,
"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": true,
"xml_report": true,
"invoice": true,
"version": 1,
"zip_report": false
}],
"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",
"total_fee": 10.0
},
"status": 200
}

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.

GET https://sandbox.reggora.io/vendor/orders

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 nested id inside each order object corresponds to the order_id.

{
"data": {
"count": 10,
"orders": [
{
"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": true,
"xml_report": true,
"invoice": true,
"version": 1,
"zip_report": false
}],
"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"
},
"..."
]
},
"status": 200
}

The "..." placeholder indicates additional entries elided for brevity.

This endpoint is used to accept an Order.

PUT https://sandbox.reggora.io/vendor/order/<order_id>/accept

ParameterDescription
order_idThe 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 data field is the order id.

{
"data": "5c1c05f532b211000e15302a",
"status": 200
}

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.

PUT https://sandbox.reggora.io/vendor/order/<order_id>/counter

ParameterDescription
order_idThe ID of the order.
ParameterDescriptionRequired
due_dateThe 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
feeThe fee that you would like the lender to change the order fee toFalse
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 data field is the order id.

{
"data": "5c1c05f532b211000e15302a",
"status": 200
}

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.

POST https://sandbox.reggora.io/vendor/order/<order_id>/fee-escalation

ParameterDescription
order_idThe ID of the order.
ParameterDescriptionRequired
feeThe fee that you would like the lender to change the order fee toTrue
reasonThe reason why you want the lender to change the order feeFalse
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)
{
"data": "Your fee escalation request is pending.",
"status": 200
}

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.

POST https://sandbox.reggora.io/vendor/order/<order_id>/new-due-date-request

ParameterDescription
order_idThe ID of the order.
ParameterDescriptionRequired
due_dateThe 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
reasonThe reason why you want the lender to change the due dateFalse
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)
{
"data": "Your new due date request is pending.",
"status": 200
}

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.

POST https://sandbox.reggora.io/vendor/order/<order_id>/fee-date-escalation

ParameterDescription
order_idThe ID of the order.
ParameterDescriptionRequired
due_dateThe 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
feeThe fee that you would like the lender to change the order fee toTrue
reasonThe reason why you want the lender to change the order fee and the due dateFalse
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)
{
"data": "Your fee escalation and new due date request is pending.",
"status": 200
}

This endpoint is used to deny an Order. The deny_reason field is required.

PUT https://sandbox.reggora.io/vendor/order/<order_id>/deny

ParameterDescription
order_idThe ID of the order.
ParameterDescriptionRequired
deny_reasonThe reason for denying an orderFalse
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 data field is the order id.

{
"data": "5c1c05f532b211000e15302a",
"status": 200
}

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.

PUT https://sandbox.reggora.io/vendor/order/<order_id>/set_inspection

ParameterDescription
order_idThe ID of the order.
ParameterDescriptionRequired
inspection_dateUTC 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 data field is the order id.

{
"data": "5c1c05f532b211000e15302a",
"status": 200
}

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.

PUT https://sandbox.reggora.io/vendor/order/<order_id>/complete_inspection

ParameterDescription
order_idThe ID of the order.
ParameterDescriptionRequired
inspection_completedUTC 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 data field is the order id.

{
"data": "5c1c05f532b211000e15302a",
"status": 200
}

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.

POST https://sandbox.reggora.io/vendor/submission/<order_id>

ParameterDescription
order_idThe ID of the order.
ParameterDescriptionRequired
pdf_filePDF fileTrue
xml_fileXML fileFalse
invoice_numberThe number for the corresponding invoiceTrue if no invoice_file
invoice_fileThe invoice fileTrue 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
{
"data": "Your submission has been uploaded to this order",
"status": 200
}

This endpoint allows vendors to upload submission documents for a specific order.

Note: This endpoint supports both legacy UAD 2.6 and new UAD 3.6 formats.

POST https://sandbox.reggora.io/vendor/submission/<order_id>

ParameterDescriptionRequired
order_idThe ID of the order.True

Request Body Parameters (Multipart/Form-Data)

Section titled “Request Body Parameters (Multipart/Form-Data)”

File Arguments: You must provide either the zip_file parameter OR both the pdf_file and xml_file parameters. Providing both sets will result in a 400 error.

ParameterDescriptionRequired
zip_fileThe UAD 3.6 submission file (ZIP format)Conditional (Required if pdf_file/xml_file are omitted)
pdf_fileThe PDF report fileConditional (Required if zip_file is omitted)
xml_fileThe UAD 2.6 XML data fileConditional (Required if zip_file is omitted)
dataA JSON object containing additional submission identifiersFalse
invoice_numberThe number for the corresponding invoiceTrue if no invoice_file
invoice_fileThe invoice fileTrue if no invoice_number

Data Object Structure: The data dictionary supports the following key-value pairs:

  • fnma_property_data_id (String): The Fannie Mae Property Data Submission ID.
  • fhlmc_property_data_id (String): The Freddie Mac Property Data Submission ID.
import json
import requests
from io import BytesIO
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# Payload for UAD 3.6 submission
body = {
"zip_file": (BytesIO(b'1,2,3,4'), 'appraisal.zip'),
# One of the following is required; this example shows both invoice_number and invoice_file
"invoice_number": "12345",
"invoice_file": (BytesIO(b'1,2,3,4'), 'invoice.pdf')
# Optional metadata object, sent as a JSON-encoded string
"data": json.dumps({
"fnma_property_data_id": "e313c472d8aa4c459b11e3aa49f9fb53",
"fhlmc_property_data_id": "77693681-393c-44d6-b018-181876f9827c",
})
}
response = requests.post('https://sandbox.reggora.io/vendor/submission/<order_id>', headers=headers, data=body)
import json
import requests
from io import BytesIO
headers = {
'Authorization': 'Bearer {}'.format(REGGORA_AUTH_TOKEN),
'integration': '{}'.format(REGGORA_INTEGRATION_KEY)
}
# Payload for UAD 2.6 submission
body = {
"pdf_file": (BytesIO(b'1,2,3,4'), 'test_file.pdf'),
"xml_file": (BytesIO(b'1,2,3,4'), 'test_file.xml'),
# One of the following is required; this example shows both invoice_number and invoice_file
"invoice_number": "12345",
"invoice_file": (BytesIO(b'1,2,3,4'), 'invoice.pdf')
# Optional metadata object, sent as a JSON-encoded string
"data": json.dumps({
"fnma_property_data_id": "e313c472d8aa4c459b11e3aa49f9fb53",
"fhlmc_property_data_id": "77693681-393c-44d6-b018-181876f9827c",
})
}
response = requests.post('https://sandbox.reggora.io/vendor/submission/<order_id>', headers=headers, data=body)
{
"data": "Your submission has been uploaded to this order",
"status": 200
}

This error occurs when a pdf or xml file is uploaded for an order whose product requires zip file format:

{
"error": "ZIP document is required"
}

This error occurs when the mutual exclusivity rule is violated (e.g, sending both a ZIP and an XML file):

{
"error": "Invalid submission arguments. You must provide either a 'zip_file' OR a 'pdf_file' and 'xml_file' pair. Both formats cannot be submitted simultaneously."
}

This endpoint returns a specific document from a Submission on an Order.

GET https://sandbox.reggora.io/vendor/submission/<order_id>/<submission_version>/<document_type>

ParameterDescription
order_idThe ID of the order.
submission_versionVersion of the submissions you want to download.
document_typeThe specific dobument type you want to download. The options are pdf, xml, invoice, or zip.
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.

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

DELETE https://sandbox.reggora.io/vendor/order/<order_id>

ParameterDescription
order_idThe ID of the order.
ParameterDescriptionRequired
messageThe reason for cancelling the orderTrue
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)
{
"data": "This order has been cancelled",
"status": 200
}