Arrowbase API Documentation

Introduction Getting Started Authentication

New Orders

Create an Order Transaction Details Requesting Party Order Details Loan Details Order Contacts Linked Products Order Response

Order Workflow

Actions Add Comments Add Documents Manage Contacts On Hold Resume Cancel Borrower Delivery Scheduling Notifications New Comments New Documents On Hold Resume Cancellation Provider Assignment Fee Changes Delivery Date Changes Inspection Appointment Completed Report

HTTP Responses & Status Codes

HTTP Responses HTTP Status Codes

Appendices

Document Types Contact Types Product Codes Loan Types Property Types

Client API

Arrowbase Technologies, Inc. provides intuitive, secure, and powerful technology to banks, credit unions, loan servicers and mortgage lenders. Our flagship appraisal management technology, AppraisalWorks, enables clients and LOS partners to access more appraisal and alternative valuation vendors, with seamless order tracking, and turnkey automation – modernizing appraisal management functions through our open APIs.

AppraisalWorks has a strong desire to work with you and align our goals for success. Here’s how we can help ...

Implement Quickly and Confidently

The AppraisalWorks system is built on RESTful APIs that are easy to implement and configure to support unique workflows. Our system also supports MISMO-based XML APIs and we can provide detailed documentation upon request. Process event updates, messaging, and document transmission for all your stakeholders and clients with one standardized integration. When a ‘minimal marketing functionality’ approach is preferred, our team can advise on the best practices for quickly implementing a successful integration and tacking on additional features as requested – getting your product to market quicker and with less setbacks.

Access a Broad Menu of Valuation Services

Access turn-key vendor integrations with top-tier AMC providers and a nationwide panel of individual appraisers – ensuring your diverse needs are met. Gain access to more options with innovative valuation tools and partnering with providers at the forefront of how real estate is valued. Don’t worry about having to frantically add AMCs to your integration roadmap, we’ve got you covered!

Improve Client and Borrower Experience

Through AppraisalWorks, clients can standardize the communication they receive from providers and the outbound communication they send to their borrowers. Configurable automation enables a lender to live within their LOS and let AppraisalWorks do the heavy lifting. This standardization and automation ultimately lead to improved stakeholder satisfaction, resulting in better ratings for your services and fueling business growth.

Future-Proof Valuation Integration Strategy

Save time on your technology roadmap for other projects by leveraging AppraisalWorks’ integrations with valuation providers. Rely on the AppraisalWorks development team to build new integrations and stay current with new products and services offered by vendor partners so you can reserve room on your backlog for your top priorities.

Advanced Technology with Rapid Improvements

AppraisalWorks stays on top of the complexity of real estate lending, implementing intuitive technology and reliable features to support lenders’ workflows. Our roadmap supports a rapid-release strategy, allowing us to deploy new features to production environments weekly – keeping up with constant demand for system improvements.

About AppraisalWorks

AppraisalWorks is a cloud-based appraisal management technology platform that enables lenders to order, manage, review, maintain, and analyze real estate appraisals and collateral valuations.

The platform improves process efficiency, ensures regulatory compliance and facilitates collaboration between lenders, processors, appraisers and borrowers — significantly improving loan turnaround time, reducing cost per loan, and enhancing the borrower experience.

Patented under U.S. Patent 10,635,999, AppraisalWorks has the power to transform appraisal management functions into a competitive advantage and provide opportunities to expand your business – contact us today.

Getting Started

Interested in setting up a sandbox account and getting started? Reach out to the team here.

The Arrowbase technology team and AppraisalWorks software implementation specialists are ready to assist with the design and implementation of your integration. Whether you are looking to integrate every method into your system, support minimum functionality for quicker time to market, or establish a custom workflow, our teams can advise on best practices and shorten your integration project.

We recommend an initial call with our experienced developers and project managers who can provide integration examples, detailed test cases, and implementation advice.

Authentication

The Arrowbase REST API authentication begins when you receive an AppraisalWorks issued Public/Private encryption key pair. AppraisalWorks will also issue you a Client ID.

Contact us to get setup.

After you receive your Public and Private keys, all new Requests will need to be signed to create an HMAC signature. Using your private key, generate a hash of the following comma separated elements using the SHA256 algorithm.

Element Description
HTTP Verb The HTTP verb being used for this request.
Content-Type The format of the content being sent. This will always be "application/json".
URL The relative URL of this request.
Timestamp The UTC timestamp of this request.
For example, to create an order, generate the SHA256 hash (using your private key) of:

"POST,application/json,,/Orders,2022-04-12 16:32:25Z"

To retrieve a comment that has been added to an order generate the SHA256 hash (using your private key) of:

"GET,application/json,,/Orders/8189-F16E-03D8-4C3F/Comments/3702215,2022-04-12 16:32:25Z"

The timestamp used in the example is in the well-defined 'yyyy-MM-dd HH:mm:ss' format, where the trailing ‘Z’ represents UTC Time.

Note: The timestamp must be added to the ‘x-request-date’ header of the request.

Note: The timestamp must reflect the time at which the request is prepared for transmission. Basic security protocols will reject the request if it is processed by the server outside of a limited time window.

This string is being used for encryption and is case sensitive, especially to the HTTP Request method and the relative path.

After this signature is generated, add the UTF8 encoded byte value to the Authorization header of the Request as a base64 encoded string in the following format:

hmac PublicKey:{signature}

Example Signature (C#):

string hmacPrivateKey = … your private key as a GUID
string canonical_string = "POST,application/json,,/Orders,2022-04-12 16:32:25Z";

UTF8Encoding encoder = new ();

var hmachasher = new HMACSHA256(encoder.GetBytes(hmacPrivKey));

byte[] hashedDataBytes = hmachasher.ComputeHash(encoder.GetBytes(canonical_string));

var signature = Convert.ToBase64String(hashedDataBytes);

Replace the ‘{signature}’ portion of the Authorization header with the ‘signature’ string from the code example.

Create an Order

This section details how to create an order and define all the components of the request that will determine how the order is fulfilled. Supporting multiple product workflows through the Arrowbase interface is easy – simply change the product code in the order request.

Orders can be created at the following endpoint:

https://uat-api.arrowbasetech.com/RapiV1/Orders

To create a new order, submit a POST request to: https://uat-api.arrowbasetech.com/RapiV1/Orders

POSTing the following Order object to the specified endpoint starts the order process.

A comprehensive order JSON object example is provided below.

{
    "referenceNumber": "demoAPI-012345",
    "complexProperty": false,
    "priority": false,
    "requestedDueDate": "12/22/2023",
    "fhaCaseNumber": "456-1569785",
    "internalComment": "Comments for the appraisal desk and review team.",
    "duCaseFileID": "02-34567890",
    "lpaKey": "01-23456789",
    "vendorInstructions": "Comments for the appraiser or AMC.",
    "requestingParty": {
        "clientID": "4564",
        "name": "ABC Lender",
        "contactName": "John Smith"
    },
    "request": {
        "internalAccountID": "12345",
        "branchID": "Branch4567",
        "loanAmount": 300000.00,
        "salesPrice": 350000.00,
        "estimatedValue": 350000.00,
        "loanType": "Purchase",
        "transactionUID": "81B9-F16E-03D8-4C3F",
        "requestData": {
       	    "action": "Original",
            "loan": {
               "application": {
                   "property": {
                      "streetAddress": "6000 Freedom Square Dr.",
                      "city": "Independence",
                      "state": "OH",
                      "county": "Cuyahoga",
                      "zip": "44131",
                      "propertyType": "Single Family"
                   }
               },
               "product": {
                  "name": "FNMA 1004 Single Family",
                  "code": "A001"
               },
               "embeddedFile": [
               {
       	          "typeID": "1010",
                  "name": "purchasecontract.PDF",
      	          "description": "Purchase Contract",
      	          "document": "Base64 encoded document"
               }
               ],
               "parties": [
               {
                  "partyType": "Borrower",
                  "firstName": "Connie",
                  "middleName": "H",
                  "lastName": "Borrower",
                  "fullName": "Connie H Borrower",
                  "contactMethod": {
                     "contactInfo": [
                     {
                        "contactLabel": "Home",
                        "contactType": "Phone",
                        "contactValue": "(440) 222-3333"
                     },
                     {
                        "contactLabel": "Home",
                        "contactType": "Email",
                        "contactValue": "connie@donotusetest.com"
                     }
                     ]
                  }
               },   
               {
                  "partyType": "Appraisal Coordinator",
                  "firstName": "Angie",
                  "middleName": "T",
                  "lastName": "Manager",
                  "fullName": "Angie T Manager",
                  "contactMethod": {
                     "contactInfo": [
                     {
                        "contactLabel": "Mobile",
                        "contactType": "Phone",
                        "contactValue": "(919) 933-7717"
                     },
                     {
                        "contactLabel": "Home",
                        "contactType": "Email",
                        "contactValue": "angie@donotusetest.com"
                     }
                     ]
                  }
               },
               {
                  "partyType": "Property Contact",
                  "firstName": "Peter",
                  "middleName": "T",
                  "lastName": "contact",
                  "fullName": "Peter T Contact",
                  "contactMethod": {
                     "contactInfo": [
                     {
                        "contactLabel": "Home",
                        "contactType": "Phone",
                        "contactValue": "(919) 933-2517"
                     },
                     {
                        "contactLabel": "Work",
                        "contactType": "Email",
                        "contactValue": "peter@donotusetest.com"
                     }
                     ]
                  }
               },
               {
                  "partyType": "Loan Officer",
                  "firstName": "Debbie",
                  "middleName": "",
                  "lastName": "Officer",
                  "fullName": "Debbie Officer",
                  "contactMethod": {
                     "contactInfo": [
                     {
                        "contactLabel": "Work",
                        "contactType": "Phone",
                        "contactValue": "(984) 219-5641"
                     },
                     {
                        "contactLabel": "Work",
                        "contactType": "Email",
                        "contactValue": "Debbie@donotusetest.com"
                     }
                     ]
                  }
               },
               {
                  "partyType": "Loan Processor",
                  "firstName": "Martin",
                  "middleName": "J",
                  "lastName": "Processor",
                  "fullName": "Martin J Processor",
                  "contactMethod": {
                     "contactInfo": [
                     {
                        "contactLabel": "Work",
                        "contactType": "Phone",
                        "contactValue": "(222) 333-5555"
                     },
                     {
                        "contactLabel": "Work",
                        "contactType": "Email",
                        "contactValue": "Martin@donotuse.test.com"
                     }
                     ]
                  }
               }
               ] 
            }  
        }
    }
}

Transaction Details

The transaction details segment of the order request includes pertinent information about the new order. A detailed breakdown of the properties and descriptions are provided below.

{
    "referenceNumber": "API-012345",
    "complexProperty": false,
    "priority": true,
    "requestedDueDate": "12/1/2022",
    "fhaCaseNumber": "123456789",
    "internalComment": "Internal Commments for Appraisal Desk and Review Team",
    "duCaseFileID": "0123456789",
    "lpaKey": "01-2345678",
    "vendorInstructions": "Please reach out to the property contact to schedule the appointment.",
    "requestingParty": { … },
    "request": { … }
}

For clarity, only the top-level properties of the Transaction object are shown here.
These properties specify the overall values of the Order and are defined as follows.

Property Required Data Type Description
referenceNumber No String Additional order identifier that may be used for tracking purposes or for consolidated tracking of portfolio or batch orders.
complexProperty No Boolean Flags the order as a complex property.
priority No Boolean Flags the order as a priority or rush order.
requestedDueDate No Date Defines the due date for the order.
fhaCaseNumber No* String Defines FHA case number for the order and is required for FHA appraisals.
internalComment No String Internal instructions to the appraisal desk or the review team.
duCaseFileID No String Desktop Underwriter identifier for Fannie Mae.
lpaKey No String Loan Prospector unique identifier for Freddie Mac.
vendorInstructions No String Order level instructions passed to the vendor on assignment.
requestingParty Yes Object This object contains data related to the requestor.
request Yes Object This object contains data related to the order request.

*This field is required for FHA Appraisals.

Requesting party

The requestingParty object contains information pertaining to the entity placing the order as defined below.

requestingParty
{
    "clientID": "4645",
    "name": "ABC Lender",
    "contactName": "John Smith"
}
Property Required Data Type Description
clientID Yes String AppraisalWorks Client ID for the lender account provided to you at setup.
name Yes String Lender's entity name.
contactName No String Name of the party that places the order.

Order Details

This object contains information specific to the transaction and subsequent order request.

request
{
    "internalAccountID": "12345",
    "branchID": "Branch4567",
    "loanAmount": 150000.00,
    "salesPrice": 210000.00,
    "estimatedValue": 200000.00,
    "loanType": "Refinance",
    "transactionUID": "0987-OB8C-FE36-9AC9",
    "requestData": {
        "action": "Original",
        "loan": {...}
    }
}
Property Required Data Type Description
internalAccountID Yes String Unique client identifier for the loan. This may be your loan number or another unique identifier.
branchID No String Unique identifier for individual lending branches.
loanAmount No Decimal Amount of the loan.
salesPrice No Decimal Value of the sale.
estimatedValue No Decimal The property’s estimated value.
loanType Yes String Refer to the Loan Types appendix for acceptable values.
TransactionUID Yes String (Globally) Unique ID value to maintain the interface connection. This could be your LOS unique identifier.
requestData Yes Object Container object holding data related to this specific request.
requestData.action Yes String The request type. i.e. “Original” (New Order Request) or “StatusQuery” (Status Request)
requestData.loan Yes Object Container object holding data related to the loan.

Loan Details

The Loan object is contained in the RequestData object and specifies data related to the property, loan, involved parties, and the product ordered.

request.requestData.loan
{
   "application": {
      "property": {
         "streetAddress": "6000 Freedom Square Dr.",
         "city": "Independence",
         "state": "OH"",
         "zip": "44131",
         "county": "Cuyahoga",
         "propertyType": "Single Family"
      }
   },
   "product": {
      "name": "FNMA 1004 Single Family",
      "code": "A001" 
   },
   "embeddedFile": 
   [{
      "typeID": "1010",
      "name": "SalesContract.pdf",
      "description": "Sales Contract",
      "document": "Base64 encoded document"
   }],
   "parties": [{ … }]
}
Property Required Data Type Description
property.streetAddress Yes String The subject property street address.
property.city Yes String The subject property city.
property.state Yes String The subject property state.
property.zip Yes String The subject property zip code.
property.county No String The subject property county.
property.propertyType Yes String Refer to the Property Types appendix for acceptable values.
product.name No String The name of the product being ordered.
product.code Yes String Refer to the Product Types appendix for acceptable values.
embeddedFile No Object Object containing details of the embedded file.
embeddedFile.typeID Yes* Integer Refer to the Document Types appendix for acceptable values.
embeddedFile.name Yes* String Name of the embedded file.
embeddedFile.description Yes* String Description of the embedded file.
embeddedFile.document Yes* String Base 64 encoded document.
parties Yes** Object Container object holding data related to the parties involved in this order.

*Embedded files are optional but if one is specified all related data elements (prefixed with embeddedFile above) are required.
**AppraisalWorks requires that at least one Borrower be provided in every order request. The three required internal parties are Loan Officer, Loan Processor, and Appraisal Coordinator, and must be included in any new order request. Additional parties may be required depending on the transaction loan type.

Order Contacts

The Parties object contains data related to all parties involved in the transaction.

request.requestData.loan.parties
"parties": 
[
{
   "partyType": "Borrower",
   "firstName": "Connie",
   "middleName": "H",
   "lastName": "Borrower",
   "contactMethod": {
      "contactInfo": 
      [
      {
         "contactLabel": "Home",
         "ContactType": "Phone",
         "ContactValue": "(440) 222-3333"
      },
      {
         "contactLabel": "Home",
         "ContactType": "Email",
         "ContactValue": "connie@donotusetest.com"
      }
      ]
   }
},
{
   "partyType": "Appraisal Coordinator",
   "firstName": "Angie",
   "middleName": "T",
   "lastName": "Manage",
   "contactMethod": {
      "contactInfo": 
      [
      {
         "contactLabel": "Mobile",
         "ContactType": "Phone",
         "ContactValue": "(919) 933-7717"
      },
      {
         "contactLabel": "Home",
         "ContactType": "Email",
         "ContactValue": "angie@donotusetest.com"
      }
      ]
   }
},
{
   "partyType": "Property Contact",
   "firstName": "Peter",
   "middleName": "T",
   "lastName": "Proper",
   "contactMethod": {
      "contactInfo": 
      [
      {
         "contactLabel": "Home",
         "ContactType": "Phone",
         "ContactValue": "(919) 933-2517"
      },
      {
         "contactLabel": "Work",
         "ContactType": "Email",
         "ContactValue": "peter@donotusetest.com"
      }
      ]
   }
},
{
   "partyType": "Loan Officer",
   "firstName": "Debbie",
   "middleName": "",
   "lastName": "Officer",
   "contactMethod": {
      "contactInfo": 
      [
      {
         "contactLabel": "Work",
         "ContactType": "Phone",
         "ContactValue": "(984) 219-5641"
      },
      {
         "contactLabel": "Work",
         "ContactType": "Email",
         "ContactValue": "debbie@donotusetest.com"
      }
      ]
   }
},
{
   "partyType": "Loan Processor",
   "firstName": "Martin",
   "middleName": "J",
   "lastName": "Processor",
   "contactMethod": {
      "contactInfo": 
      [
      {
         "contactLabel": "Work",
         "ContactType": "Phone",
         "ContactValue": "(222) 333-5555"
      },
      {
         "contactLabel": "Work",
         "ContactType": "Email",
         "ContactValue": "martin@donotuse.test.com"
      }
      ]
   }
}
]
Property Required Data Type Description
partyType Yes* String The Party Type being added (refer to the Party Types appendix for acceptable values).
firstName No String First name of the contact.
middleName No String Middle name of the contact.
lastName Yes String Last name of the contact.
contactMethod Yes Object Object containing the methods of contacting the party.
contactMethod.contactInfo Yes Object Object containing contact method information.
contactInfo.contactLabel Yes String Label for this contact method (i.e. Home, Work).
contactInfo.contactType Yes String Type of contact information being provided (i.e. Phone, email, etc).
contactInfo.contactValue Yes String Contact information (i.e. email address, phone number, etc.).

*AppraisalWorks requires that at least one Borrower be provided in every order request. Additional parties may be required depending on the transaction loan type.
* The Appraisal Coordinator party is required but may be defaulted to a pre-defined contact on all new orer requests. Contact your implementation consultant to discuss this setting.

Response to Placing an Order

Upon placing an order, the integration will return the following response describing the state.

{        
   "orderNumber": "111977-1",
   "condition": "In Progress",        
   "isSuccess": true,
   "description": "Not present if the order was successfully placed.",        
   "datetime": "2022-04-20 13:56:09Z",
}
Property Data Type Description
orderNumber* String The AppraisalWorks order number associated with this order.
condition String Description of the order request state.
isSuccess Bool Json value indicating success or failure. (true | false)
description String On failure to place the order, provides a description of the error.
datetime String UTC timestamp when the Response was sent back.

*An order may have multiple individual items associated with it, representing numerous products attached to that loan. Refer to Linked Products for details on linking individual items to one order number.

Linked Products

AppraisalWorks supports linked ordering and tracking of multiple products on an order number. When an order is entered for the same internalAccountID and Subject Property Address as a prior order with that same information, the orders will be considered ‘linked’. This enables cascading product strategies and easier order tracking when multiple valuation solutions are needed for one property.

When products have been linked together on an order number, the resulting products will be identified by the item number component of the orderNumber, where the order number is constructed as follows: orderNumber-itemNumber.

Linked Products Example:
AVM Order will be orderNumber: 105998-1
Property Condition Report will be orderNumber: 105998-2
FNMA 1004 Single Family Appraisal will be orderNumber: 105998-3

Actions

Once an order is placed, the client may continue to manage the order without leaving their LOS or operating system, using workflow actions to update the order information, communicate with stakeholders, or manage the workflow of the order.

The following sections describe the POST and PUT Requests supported by the Arrowbase API.

For all the Requests documented in this section, the HTTP status code in the Response is outlined in the HTTP Status Codes section.

Adding Comments to an Order

Endpoint: POST /Orders/{TransactionUID}/Comments

Comments enable communication with all stakeholders throughout the order lifecycle. To add a comment to an order, submit a POST request to the specified URL with the following payload.

{
   "comment": "Hello, this is a comment."
}
Property Required Data Type Description
comment Yes String The comment to be added to the order.

Adding Documentation to an Order

Endpoint: POST /Orders/{TransactionUID}/Documents

Clients can also add documents at any point during the order lifecycle. To add documents to an order submit a POST request to the specified URL with the following payload.

{
   "embeddedFile": {
      "typeID": "2060",
      "name": "filename.docnewdocument.PDF",
      "description": "Appraisal Support Document",
      "document": "Base64 encoded document"
   }
}
Property Required Data Type Description
embeddedFile Yes Object Object containing details of the embedded file.
embeddedFile.typeID Yes Integer Refer to the Document Types appendix for acceptable values.
embeddedFile.name Yes String Name of the embedded file.
embeddedFile.description Yes String Description of the embedded file.
embeddedFile.document Yes String Base 64 encoded document.

This request will return standard HTTP responses, typically 200 (Ok).

Managing Contacts for an Order

Endpoint: PUT /Orders/{TransactionUID}/Contacts

Contact objects are established during the order post entry and managed through the Contacts endpoints following your initial order. To add a contact for an order, submit a POST request to the specified URL with the following payload defined below.

{
   "partyType": "Property Contact",
   "firstName": "Jane",
   "LastName": "Smith",
   "emailAddress": "JaneSmith@test.com",
   "phone": "555-555-5555"
}
Property Required Data Type Description
partyType Yes String Refer to the Party Types appendix for acceptable values.
firstName Yes String The contact first name.
lastName Yes String The contact last name.
emailAddress Yes String The email address of the contact.
phone Yes String The phone number of the contact.

This request will return standard HTTP responses, typically 200 (Ok).

On Hold

Endpoint: PUT /Orders/{TransactionUID}/Hold

To place an order on hold, submit a PUT request to the specified URL with the following object defined below.

{
   "reason": "Borrower payment not received"
}
Property Required Data Type Description
reason Yes String The reason for placing the order on hold.

This request will generate a standard HTTP response. For successful requests a 200 (Ok) will be generated and if the request is not successful an HTTP response describing the error will be returned.

Resume

Endpoint: PUT /Orders/{TransactionUID}/Resume

To remove a hold from an order and resume the workflow, submit a PUT request to the specified URL with the following object defined below.

{
   "reason": "Borrower payment received."
}
Property Required Data Type Description
reason Yes String The reason the hold is being removed from the order.

Please note that this request applies only to an order that is on hold. It has no effect on an order that has been cancelled.

Cancelling an Order

Endpoint: PUT /Orders/{TransactionUID}/Cancel

To cancel an order, submit a PUT request to the specified URL with the following object defined below.

{
   "reason": "Borrower has decided not to proceed with the loan."
}
Property Required Data Type Description
reason No String The reason for the cancellation request.

Borrower Delivery

Endpoint: PUT /Orders/{TransactionUID}/DeliverToBorrower

To request report delivery to the borrower, submit a PUT request to the specified URL with the following object defined below.

{
   "borrowerEmail": "JohnHomeowner@test.com",
   "borrowerAddress1": "123 Main St",
   "borrowerAddress2": "Apt 2",
   "borrowerCity": "SomewhereVille",
   "borrowerState": "OH",
   "borrowerZip": "42131"
}
Property Required Data Type Description
borrowerEmail Yes String Email address of the borrower.
borrowerAddress1 Yes String Address line 1 of the borrower.
borrowerAddress2 Yes String Address line 2 of the borrower.
borrowerCity Yes String City of the borrower.
borrowerState Yes String State of the borrower.
borrowerZip Yes String Zip code of the borrower.

This request will generate a standard HTTP response. For successful requests a 200 (Ok) will be generated and if the request is not successful an HTTP response describing the error will be returned.

Inspection Schedule

Endpoint: PUT /Orders/{TransactionUID}/InspectionSchedule

To request appointment dates for the appraisal inspection, submit a PUT request to the specified URL with the following object defined below.

{
    "option1Date": "2022-08-15",
    "option1TimeSlot": "1",
    "option2Date": "2022-08-16",
    "option2TimeSlot": "1",
    "option3Date": "2022-08-17",
    "option2TimeSlot": "2",
    "contactPhone": "555-555-5555",
    "cell": true,
    "comments": "I have a big friendly dog"
}
Property Required Data Type Description
option1Date Yes Date Preferred date from property contact.
option1TimeSlot Yes String Values are 1, 2 or 3.
option2Date No Date Preferred date from property contact.
option2TimeSlot No String Values are 1, 2 or 3.
option3Date No Date Preferred date from property contact.
option3TimeSlot No String Values are 1, 2 or 3.
contactPhone No String Revised phone number if needed.
cell No Bool If cell phone value is true.
comments No String Additional comment for the appraiser.

This request will generate a standard HTTP response. For successful requests a 200 (Ok) will be generated and if the request is not successful an HTTP response describing the error will be returned.

Notes

TimeSlots – there are 3 time slots available: 1 = 8 – Noon, 2 = noon – 5, 3 = 5-9. The requested options are delivered to the appraisal provider by AW. AW will reply back with the “Scheduled” notification which contains the specific data and time the provider will arrive.

Notifications

After an order is placed, the client can receive milestone event notifications that are delivered as the order is being processed.

Using the Postback URL provided by the client at sign-up, each event will trigger a notification request message using the format described below.

{
   "apiEvent": {
      "transactionUID": "0987-0bbc-fe36-9AC9"
      "eventName": "Resume",
      "detailId": "1823005",
      "path": "/Orders/0987-0bbc-fe36-9AC9/Resume/1823005"
   }
}
Property Data Type Description
apiEvent Object Object providing details of an event in a postback request to the client.
transactionUID String The (globally) unique ID used by the client to reference the order when it was placed.
eventName String Text description of the event code.
detailId Int Specifies an additional identifier needed to retrieve data for an event. Can be zero for some events.
path* String The relative route path that can be used to call into the RESTful API to retrieve data for this event.

*If the ‘detailId’ property is 0 then it is not included when building the route path in a call into the RESTful API.

Upon receipt of an apiRequest the client should return an HTTP Status 200 (OK). No body text is required in the response.

It is at the discretion of the client to call into the Arrowbase API using the ‘path’ provided in the event message to retrieve the data pertinent to that event.

The following sections describe each event and detail the data fields returned upon success in the response to a GET request.

After a successful call to the API, additional property fields will precede the data in the table below, as outlined in the sections to follow.
If an error occurs or the data is unavailable, the following table details the data returned with an HTTP Status 400 (Bad Request).

Property Data Type Description
isSuccess Bool When false the HTTP Status will be 400 (Bad Request). When true the HTTP Status will be 200 (OK).
description String Explanation of the error.
datetime Date UTC timestamp when the response was created.

New Comments

Endpoint: GET /Orders/{transactionUID}/Comments/{detailId}

If a comment is added to an order, a notification will be sent to the client and they will be able to retrieve the detailed comment information depicted below.

{        
   "comment": "A new comment was placed on your order.",
   "commentcategory": "Order Notes",
   "isSuccess": true,
   "datetime": "2022-04-04 16:58:31Z"
}
Property Data Type Description
comment String The new comment.
commentcategory String The category associated with the comment.
isSuccess Bool When false the HTTP Status will be 400 (Bad Request). When true the HTTP Status will be 200 (OK).
datetime Date UTC timestamp when the response was created.

New Documents

Endpoint: GET /Orders/{transactionUID}/Documents/{detailId}

Documents may be automatically returned upon final completion of an order, all at once. Post-delivery, clients may receive additional supplemental documents via the documents endpoint.

{
   "embeddedFile": {
      "typeID": "2061"
      "name": "O-111924-1-202204041550272228958.txt",
      "description": "Revised Appraisal Report",
      "document": " . . . base64 encoded data . . . "
   },
   "isSuccess": true,
   "datetime": "2022-04-04 16:58:31Z"
}
Property Data Type Description
embeddedFile Object Provides details of the document.
typeID Int Refer to the Document Types appendix for acceptable values.
name String The filename of the document.
description String Description of the file type and additional comments.
document String Base64 encoded string.

On Hold

Endpoint: GET /Orders/{transactionUID}/Hold/{detailId}

Notification that the order has been placed on hold, pending further information or action.

{        
   "reason": "On Hold per Borrower – there is an unforeseen delay.",
   "isSuccess": true,
   "datetime": "2022-04-04 16:58:31Z"
}
Property Data Type Description
reason String An explanation to justify placing the order on hold.
isSuccess Bool When false the HTTP Status will be 400 (Bad Request). When true the HTTP Status will be 200 (OK).
datetime Date UTC timestamp when the response was created.

Resume

Endpoint: GET /Orders/{transactionUID}/Resume/{detailId}

The order delay has been resolved and the order is proceeding.

{        
   "reason": "The unforeseen issue has been addressed.",
   "isSuccess": true,
   "datetime": "2022-04-04 16:58:31Z"
}
Property Data Type Description
reason String An explanation to justify removing the hold on the order.
isSuccess Bool When false the HTTP Status will be 400 (Bad Request). When true the HTTP Status will be 200 (OK).
datetime Date UTC timestamp when the response was created.

Cancel

Endpoint: GET /Orders/{transactionUID}/Cancel/{detailId}

This transaction is generated when the order has been cancelled.

{        
    "reason": "Order cancelled by user request.",
    "isSuccess": true,
    "datetime": "2022-04-04 16:58:31Z"
}
Property Data Type Description
reason String An explanation to justify cancelling the order.
isSuccess Bool When false the HTTP Status will be 400 (Bad Request). When true the HTTP Status will be 200 (OK).
datetime Date UTC timestamp when the response was created.

Provider Assignment

Endpoint: GET /Orders/{transactionUID}/Assignment/{detailId}

This transaction is generated when a provider has been assigned to the order and accepted that assignment.

{
   "appraiserName": "Jane Appraiser",
   "companyName": "Appraisers INC.",
   "distance": "147.65",
   "appraiserLicenseNumber": "tst-12345"
   "isSuccess": true,
   "datetime": "2022-04-04 16:58:31Z"
}
Property Data Type Description
appraiserName String The name of the appraiser.
companyName String The name of the company.
distance Integer The distance to the subject property.
appraiserLicenseNumber String The appraiser's license number.
isSuccess Bool When false the HTTP Status will be 400 (Bad Request). When true the HTTP Status will be 200 (OK).
datetime Date UTC timestamp when the response was created.

Fee Changes

Endpoint: GET /Orders/{transactionUID}/FeeChanged/{detailId}

This event is generated if the vendor requests a fee change for an order.

{
    "reason": "This property is complex and will require a higher fee to complete."
    "revisedVendorFee": "350.00",
    "isSuccess": true,
    "datetime": "2022-04-04 16:58:31Z"
}
Property Data Type Description
revisedVendorFee Decimal The revised fee amount requested by the vendor.
reason String The reason the vendor is requesting the fee change.
isSuccess Bool When false the HTTP Status will be 400 (Bad Request). When true the HTTP Status will be 200 (OK).
datetime Date UTC timestamp when the response was created.

Delivery Date Changes

Endpoint: GET /Orders/{transactionUID}/ExpectedDelivery

Throughout the order process, the assigned provider may update the estimated delivery date of the order. This notification is triggered anytime the estimated delivery date has been revised, notifying the client when the provider anticipates have the report completed.

The ‘detailId’ in the postback request is not used for this GET call into the RESTful API.

{        
   "expecteddate": "2022-04-21 19:49:00Z",
   "isSuccess": true,
   "datetime": "2022-04-04 16:58:31Z"
}
Property Data Type Description
expecteddate String The UTC timestamp on which the Final Report is expected to be available.
isSuccess Bool When false the HTTP Status will be 400 (Bad Request). When true the HTTP Status will be 200 (OK).
datetime Date UTC timestamp when the response was created.

Inspection Appointment

Endpoint: GET /Orders/{transactionUID}/Scheduled

Endpoint: GET /Orders/{transactionUID}/Rescheduled

When the provider has scheduled the inspection appointment for the subject property, the ‘Scheduled’ notification will occur. Any subsequent changes to this inspection date will be accompanied by a ‘Rescheduled’ notification.

The ‘detailId’ in the postback request is not used for this GET call into the RESTful API.

{        
   "appointmentdate": "2022-04-28 14:15:00Z",
   "isSuccess": true,
   "datetime": "2022-04-04 16:58:31Z"
}
Property Data Type Description
appointmentDate Date The UTC (re)scheduled appointment date.
isSuccess Bool When false the HTTP Status will be 400 (Bad Request). When true the HTTP Status will be 200 (OK).
datetime Date UTC timestamp when the response was created.

Completed Report

Endpoint: GET /Orders/{transactionUID}/Completed

When the report is delivered and the order has been marked complete, AppraisalWorks will package up the client’s pre-defined delivery documents and submit them through the API with the below defined data payload. Additional data elements not present in the data payload below may also be accessible from the data file of the report that is being delivered.

The ‘detailId’ in the postback request is not used for this GET call into the Arrowbase API.

{
   "property": 
   {
      "assessorsParcelIdentifier": "1234"
      "lotSize": "",
      "livingArea": "",
      "stories": "2",
      "yearBuilt": "1992",
      "totalRooms": "8"
   },
   "valuationResults": 
   {
      "value": 100000.00,
      "valuationDate": "2021-11-03 11:01 AM EST",
      "appraiserName": "Jane Appraiser",
      "appraiserLicenseNumber": "tst-12345"
   },
   "embeddedFile": [
   {
      "typeID": "2010",
      "name": "FinalAppraisalDoc.xml",
      "description": "MISMO 2.6 GSE Appraisal Dataset with embedded PDF file",
      "document": "Base64 encoded document"
   },
   {
      "typeID": "1000",
      "name": "Invoice.PDF",
      "description": "Invoice for service",
      "document": "Base64 encoded document"
   }
   ]
}
Property Data Type Description
property Object Object containing property related data.
property.assessorsParcelIdentifier String Parcel identifier of the assessor.
property.lotSize String The size of the lot.
property.livingArea String The living area (in sq. ft.).
property.stories Integer The number of stories in the property.
property.yearBuilt Integer The year the property was built.
property.totalRooms Integer The number of rooms in the property.
valuationResults Object Object containing results of the valuation.
valuationResults.value Decimal The estimate of the value.
valuationResults.valuationDate Date Date the valuation occurred.
valuationResults.appraiserName String Name of the appraiser.
valuationResults.appraiserLicenseNumber String License number of the appraiser.
embeddedFile Object Object containing details of the embedded file.
embeddedFile.typeID Integer Refer to the Document Types appendix for acceptable values.
embeddedFile.name String Name of the embedded file.
embeddedFile.description String Description of the embedded file.
embeddedFile.document String Base 64 encoded document.

Appointment Set

Appointment objects contain all information on the appointment that was set within the order. You can receive the appointment date and request a reschedule of the appointment date.

When the appointment is scheduled, you will receive the appointment date to your specified endpoint destination from your order request as a confirmation. The object sent in this notification is defined below.

{
   
   "appointmentDate": "11/1/2021 12:00PM EST"
}
Property Data Type Description
orderID String The ID associated with this order.
appointmentDate Date The scheduled appointment date.

Reschedule Appointment Request

Endpoint: PUT /Orders/{TransactionUID}/Reschedule

If you need to request that an appointment be rescheduled submit a PUT request to the specified URL..

{
   "orderID": "12345",
   "appointmentDate": "1/1/2021 12:00PM EST",
   "comment": "Property contact needs to reschedule."
}
Property Required Data Type Description
orderID Yes String The ID associated with this order.
appointmentDate Yes Date The date requested.
comment Yes String Reason for the request.

Standard HTTP responses are generated by this request and will typically be 200 (Ok) for successful request.

HTTP Responses

The default Response to any Request will comprise of the JSON properties as defined below:

{        
    "isSuccess": true,
    "descripton": "Not present if the Request call succeeded.",
    "datetime": "2022-04-04 16:58:31Z"
}
Property Data Type Description
isSuccess* Bool JSON value indicating success or failure. (true | false)
description String When the Request fails, provides a description of the error. If isSuccess is ‘true’ this property is not present.
datetime Date UTC timestamp when the response was created.

*This property will only be ‘true’ if the Request succeeds and the Status Code is 200. For all other Status Codes, it will be ’false’.

HTTP Status Codes

200 – OK

The Request succeeded. isSuccess in the Response will always be ‘true’. A POST to place an order and all the GET calls will return additional data properties, as described throughout this document, prefixed to the default JSON Response.

400 – Bad Request

The Request contained mal-formed JSON or invalid or missing data and could not be processed.

401 – Unauthorized

The authentication and encryption process detected invalid header data or failed to match the encrypted signature provided by the client.

500 – Internal Server Error

The server was unable to handle the Request or suffered an unexpected error condition.

501 – Not Implemented

The HTTP Request methed is not supported. Only POST, PUT and GET Request methods are allowed.

Appendix - Document types

Client Documents

The folllowing documents may be added by the client at any time throughout the order process and will aid the provider in completion of the services.

Document Code Description
1010 Purchase Contract
2060 Appraisal Support Document
2061 Engagement Letter
2062 Original Appraisal for Review
2063 Value Dispute

Provider Documents

The following documents may be returned by the provider upon completion of the order request and subsequent deliveries.

Document Code Description
1000 Invoice for service
1020 Submission Summary Report - FNMA
1025 Submission Summary Report - FMAC
2000 Appraisal PDF
2010 MISMO 2.6 GSE Appraisal Dataset with Embedded PDF
2020 MISMO 3.4 Appraisal Dataset with Embedded PDF
2040 Automated Review
2050 Property Inspection Data
2060 Appraisal Support Document

Appendix - Contact types

Contact Roles

The following is a list of valid contact roles supported that may be used to define the partyType in the requests.

  • Borrower
  • Loan Officer
  • Loan Processor
  • Property Contact
  • Appraisal Coordinator
  • Attorney
  • Builder
  • Buyer
  • Lender
  • Other
  • Owner
  • Real Estate Agent – Buyer
  • Real Estate Agent – Seller
  • Seller

Contact Types

The following is a list of valid supported contact types that may be used to define the contactType in the requests and will determine the type of contact information being provided.

  • Email
  • Phone
  • Mobile

Contact Labels

The following is a list of valid supported contact labels that may be used to define the contactLabel in the requests and will determine how the information that is supplied should be used.

  • Home
  • Work
  • Other

Appendix - Product Codes

Product Codes Description
A001 FNMA 1004 Single Family
A002 FNMA 1025 2-4 Unit
A004 FNMA 2006 Desk Review
A005 FNMA 2000 Field Review
A007 FNMA 1073 Condo
A010 FNMA 2090 Co-op
A011 FNMA 2095 Co-op Exterior
A012 Land Appraisal
A013 FNMA 1004-D
A014 Draw Inspection
A018 FNMA 2055 Exterior
A019 FHA 1004 Single Family
A021 FHA 1073 Condo
A022 USDA
A023 FNMA 1004C Mfg Housing
A027 FHA 1025 2-4 Unit
A030 FNMA 216 Operating Income Statement
A035 FHA 1004C Mfg Housing
A036 FNMA 1004 New Construction
A042 FNMA 1007 Comparable Rent
A043 FNMA 2000 Single Family
A055 FNMA 1025 + FNMA 216
A060 FNMA 1004C + FNMA 1007
A061 FNMA 1004 + FNMA 1007
A062 FNMA 1073 + FNMA 1007
A070 FHA 1004 203K
A073 FNMA 1075 Ext Condo
A076 FNMA 1004 + FNMA 216 + FNMA 1007
A082 FNMA 1073 + FNMA 216 + FNMA 1007
A085 ValueNet 55 (Comp Photos)
A104 ValueNet 55
A105 ValueNet Basic
A106 ValueNet Plus
A107 ValueNet EX
A112 Broker Price Opinion Ext
A113 Broker Price Opinion Int
A114 Broker Price Opinion Land
A115 Property Condition Report
A119 Interior Property Condition Report
A120 Commercial FIRREA/USPAP Compliance Review
A124 FHA Compliance Inspection
A143 CA AVM
A157 iValueNet Plus
A158 iValueNet EX
A159 iValueNet 55
A15R eValWorks (PCR + Review)
A160 iValueNet 55 (Comp Photos)
A169 CA Risk Profiler
A170 ValueNet Plus (Comp Photos)
A176 FieldSmart LTE – Exterior
A17A FieldSmart Full – Exterior
A183 ValueNet 55 (Comp Photos + Cost Approach)
A196 AIV/ARV FNMA 1004
A197 AIV/ARV FNMA 1025
A198 AIV/ARV FNMA 1073
A199 AIV/ARV FNMA 2055 Exterior
A209 FNMA Property Data Collection
A211 iValueNet Plus (Comp Photos)
A220 FieldSmart Full – Interior
A221 FieldSmart LTE – Interior
A222 FieldSmart SI – Interior
A223 FieldSmart SI – Exterior
A230 AIV/ARV FNMA 1004 + FNMA 1007
A231 AIV/ARV FNMA 1025 + FNMA 216
A232 AIV/ARV FNMA 1073 + FNMA 1007
A233 AIV/ARV FNMA 2055 + FNMA 1007
A234 CA Commercial Value
A237 FMAC Property Data Report
A238 Home Value Explorer
A254 1004/70H Bifurcated Appraisal FNMA
A255 FNMA 1004/70 Desktop
A256 1004/70H Bifurcated Appraisal FMAC
A258 1004/70H Bifurcated Appraisal
A260 ValueNet 55 AIV+ARV
A261 ValueNet 55 AIV+ARV (Comp Photos)
A262 iValueNet 55 AIV+ARV
A263 iValueNet 55 AIV+ARV (Comp Photos)
A264 ValueNet 55 with Rent Addendum
A265 iValueNet 55 with Rent Addendum
A266 iValueNet 55 with Rent Addendum (Comp Photos)
A267 ValueNet 55 with Rent Addendum (Comp Photos)
A268 iValueNet 55 AIV/ARV with Rent Addendum
A269 Broker Price Opinion Ext w/ARV
A270 Broker Price Opinion Int w/ARV
A271 ValueNet 55 Basic
A281 Broker Price Opinion Int + 24 hour rush
A282 Broker Price Opinion Int + 48 hour rush
A283 Broker Price Opinion Ext + 24 hour rush
A284 Broker Price Opinion Ext + 48 hour rush
A285 Evaluation Interior
A286 Evaluation Interior + 24 hour rush
A287 Evaluation Interior + 48 hour rush
A289 Evaluation Exterior + 24 hour rush
A290 Evaluation Exterior + 48 hour rush
A291 Broker Price Opinion Int w/ARV + 24 hour rush
A292 Broker Price Opinion Int w/ARV + 48 hour rush
A293 Broker Price Opinion Ext w/ARV + 24 hour rush
A294 Broker Price Opinion Ext w/ARV + 48 hour rush
AC01 AVM – GEO AVM
AE11 eVal
AEVM eVal-AVM
AS01 Commercial Appraisal Report
AS02 Commercial Evaluation (Form Report)
AS03 Commercial Desk Technical Review
AS04 Commercial Narrative Restricted Appraisal Report
AS05 Commercial Form Restricted Appraisal Report
AS06 Commercial Concise Summary Appraisal Report
AS07 Commercial Field Technical Review
AS08 Commercial Review Form 4002
AS09 Commercial Construction Draw Inspection
AS10 Commercial General Market Data Report
AVMM AVM – Collateral Analytics
AX1 Valuation Compliance Review
CTRK Compliance Track AVM Cascade
LNOC OptiVal AVM Cascade

Appendix - Loan Types

  • Acquisition
  • Construction
  • Default
  • Home Equity
  • Land Contract
  • Purchase
  • Refinance
  • Renewal
  • REO
  • Reverse
  • Workout
  • Unknown

Appendix - Property Types

  • Commercial
  • Condo
  • Duplex
  • Farm Property
  • Manufactured Home
  • Multi-Family
  • Other
  • PUD
  • Single Family
  • Town Home
  • Vacant Land

Appendix - Note Types

  • Accounting
  • Appraisal
  • Appraisal Correction Requested
  • Appraisal QC Request
  • Appraisal Report Due
  • Appraisal- Appointment Date/time
  • Borrower Report Delivery
  • Follow Up
  • On Hold