Download OpenAPI specification:
APIs for integrating with the Profet platform's Single Sign-On, Valuation, and Review applications.
Profet platform is comprised of 3 applications:
Valuation: to create appraisals or alternate valuations using MLS & public record data and pre-built market insights and valuation models.
Review: to review completed appraisals for quality using rules, computer vision, natural language, floor plan analysis, and neighborhood and market insights.
Workflow: to manage order management processes and get insights into the performance metrics at vendor or organizational level.
Profet is an open platform where any of the above applications can be integrated with other 3rd party applications to help deliver a best-of-breed capabilities for customers. The more the competition among software providers the better it is for appraisers, AMCs, and lenders to achieve modernization goals in the best possible way that fits their organizations.
This guide provides the necessary API information and single signon options available in Profet to enable such an open integration.
The platform provides 2 environments - Sandbox and Production. The base URLs for the two environments are:
Sandbox environment: https://api.staging.profet.ai
Prod environment: https://api.profet.ai
The full url for the APIs must be formed as follows:
<server_base_url>/<api-end-point>
Example:
https://api.profet.ai/valuation/initiateOrder
Security is enforced using a static customer API token which may be passed via a header attribute in each API call. The name of the header attribute must be "x-api-key".
Note: You can generate this API key from your company's account in Profet.
Profet platform can invoke your webhooks to deliver events when they occur within any application in the platform. Customers may register a webhook with Profet and the webhook will be invoked when an event occurs.
You can manage your webhooks using the Webhook Management screen in your Company settings. You should be logged in with the role of a “Company Administrator” to be able to manage your integration settings.
From the main menu, go to Administration -> Company -> Integration
Click “Add Webhook Configuration” to add your webhook. You can choose the event you want to listen to and the authentication credentials for your webhook.
Note that all webhook events will be delivered using HTTP POST method and the request body will have a content type based on the event. Certain events generate a single-part HTTP request and other webhooks generate a multi-part HTTP request. The following table gives you a list of events and the content-type for each event.
| Source Application | Event ID | Content-Type | Description |
|---|---|---|---|
| Valuation | Valuation.OrderCreated | applicaiton/json | Order has been created |
| Valuation | Valuation.OrderCompleted | applicaiton/json | Order has been completed. Only include order details |
| Valuation | Valuation.OrderCompletedWithReport | form-data (multipart) | Order has been completed. Includes order details and the final reports as specified in the requested artifacts in the initiateOrder API call. |
| Review | Review.V2.Approved | applicaiton/json | Review has been approved by QC. Only include order details |
| Review | Review.ApprovedWithReport | form-data (multipart) | Review has been approved. Includes order details and the final QC report PDF. |
| Review | Review.V2.NeedsUpdate | applicaiton/json | Review has been rejected by QC. Only include order details |
| Review | Review.NeedsUpdateWithReport | form-data (multipart) | Review has been rejected. Includes order details and the final QC report PDF. |
| Review | Review.V2.ReadyForReview | applicaiton/json | Review is ready for manual QC. Only include order details |
| Review | Review.ReadyForReviewWithReport | form-data (multipart) | Review is ready for manual QC. Includes order details and the final QC report PDF. |
For Automated Reviews in Profet Review, the webhook will be invoked when the order reaches the 'Completed' status. The event in the request will be Review.V2.ReadyForReview.
For Manual Reviews, the webhook will be invoked when the order is marked as "NeedsUpdate" or "Approved" by the reviewer. See the events above for the applicable event names.
Depending the Profet application that originates the webhook and the content-type, you will receive different request payloads. These payloads are explained below.
Content-Type: applicaiton/json
The JSON object strtucture for the payload is defined under "ValuationWebhookPayload" in the Schemas section below.
Content-Type: form-data (multipart)
The Request will have the following parts with the corresponding part names
| Multipart Field Name | Type | Content-Type | Description |
|---|---|---|---|
| orderInfo | JSON | applicaton/json | JSON object as defined under "ValuationWithReportOrderInfo" |
| report | File | application/pdf | PDF Report File |
| env | File | application/octet-stream | FNC ENV File for the order |
| aciXml | File | application/XML | ACI XML representation of the order |
| oadiXml | File | application/XML | AI Ready XML |
Note that the parts received in the Webhook will be dependent on the requestedArtifacts in the initiateOrder API call.
Content-Type: applicaiton/json
The JSON object strtucture for the payload is defined under "ReviewWebhookPayload" in the Schemas section below.
Content-Type: form-data (multipart)
The Request will have the following parts with the corresponding part names
| Multipart Field Name | Type | Content-Type | Description |
|---|---|---|---|
| orderInfo | JSON | applicaton/json | JSON object as defined under "ReviewWithReportOrderInfo" |
| report | File | application/pdf | PDF Report File |
This section presents the Single Sign-On (SSO) implementation information for the Profet platform. Profet is hosted on AWS and uses AWS Cognito for user authentication. User roles and role based access control are managed within the platform and do not use AWS Cognito for role based authorization.
SSO in Profet is supported via 2 options:
Standard protocols available via AWS Cognito - SAML and OpenID are both supported.
Please contact PropMix Support at support@propmix.io for additional information on how to configure your Identify Provider to integrate with Profet for standards based SSO.
Proprietary SSO using Profet APIs
This option is explained in more detail later in this document.
The following 3 sections explain the below capabilities for SSO:
Initial onboarding of users into the Profet platform
User Provisioning: Ongoing Provisioning / De-provisioning Users in the Profet platform
Runtime SSO between your application and Profet using proprietary SSO APIs from Profet
Profet supports batch processes to onboard the initial set of users. The following information would be requested for each user to be able to onboard them into Profet:
The above information may be provided in one or more CSV (comma-separated values) files to PropMix. The Profet team will transform the data into a standard form for consumption by Profet user onboarding jobs.
Onboarded users will automatically receive an email from PropMix including their username and temporary password. On first login, the users will be required to reset their passwords. If the temporary login expires, the customer administrator or PropMix support can resend the initial activation email.
Note that the activation email content is completely customizable to your specific needs.
Creates a new user in Profet. Note that this API is meant for the creation of staff users within your company - in other words employees of your company.
IMPORTANT NOTE: Do not use this API to create a panel appraiser or broker. You would use the Profet Order Management application to add panel members.
| firstName required | string First name of the user. |
| lastName required | string Last name of the user. |
| email required | string <email> The email address for the user - also serves as the username. |
| roles required | string Comma separated string of roles for the user in the company. See the UserRole enumeration. |
| ssoType required | string (SSOType) Enum: "SSO" "PROFETSSO" Type of SSO user. |
{- "firstName": "string",
- "lastName": "string",
- "email": "user@example.com",
- "roles": "string",
- "ssoType": "SSO"
}{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string",
- "data": {
- "username": "string"
}
}Updates the details for a user including roles within their primary company.
| email required | string <email> Email id for the user to be updated. |
| firstName | string |
| lastName | string |
| roles | Array of strings (UserRole) Items Enum: "COMPANY_ADMIN" "MANAGER" "REVIEWER" "CHIEF_APPRAISER" "APPRAISER" "APPRAISAL_ASSISTANT" "SUPERVISORY_APPRAISER" "BROKER" "INSPECTOR" "LOAN_OFFICER" "UNDERWRITER" List of roles for the user in the company. |
{- "email": "user@example.com",
- "firstName": "string",
- "lastName": "string",
- "roles": [
- "COMPANY_ADMIN"
]
}{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string"
}Disables the user by updating the status of the user to inactive.
| username required | string Username for the user to be updated. |
{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string",
- "data": {
- "userStatus": "ACTIVE",
- "username": "string"
}
}Retrieves a redirect URL for a user to log into Profet.
| email required | string <email> Email address of the user. |
| orderId required | string The order reference obtained from the Profet application response. |
| applicationName required | string (ApplicationName) Enum: "review" "valuation" "workflow" Application to access. |
| viewOrder | boolean Default: false If true, returns a read-only URL for the order. |
{- "email": "user@example.com",
- "orderId": "string",
- "applicationName": "review",
- "viewOrder": false
}{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string",
}Order creation, management, and reporting for Profet Valuation.
Profet Valuation helps build various valuation models and custom property value reports. In addition, it also supports numerous out-of-the-box reports such as property details, transaction history, market research, etc. Below is a list of available APIs to integrate Profet Valuation into your existing workflows.
While the below APIs are readily available, if your workflow requires any variations from these they can be specialized as needed.
Creates a new order within the valuation platform.
Currently only supports reports that are property specific. Examples of property specific reports are valuation reports, transaction history etc and examples of reports that are not property specific are market research, market condition report (1004MC), etc.
Note that the request needs to identify the subject property by providing one of the following:
Listing Id - retrieved by using one of the PropMix Listing APIs such as GetListingDetails, GetListingsByRadius, etc.
PMX Property Id - retrieved by using one of the PropMix Public Record APIs such as GetPropertyDetails
Property Address - all elements of the property address must be provided. This includes street address, city, state, and zip using the fields listed in the request parameters table above.
| orderId required | string Customer specific order id. |
| reportType required | string (ReportType) Enum: "appraisalReport" "evaluationReport" "avmReport" "desktopAppraisalReport" "unifiedDesktopAppraisalReport" "complexityReport" "fnmaBpoExterior" "fnmaBpoInterior" One of the published report types. If a custom report is implemented for your needs the Profet team will provide you a reportType value to use. |
required | object (Property) |
required | object (ClientInfo) |
| inspectionOrderId | string If there is an associated inspection, the order id for the inspection. |
| inspectionProvider | string (InspectionProvider) Enum: "CAPTURE" "IVUEIT" One of the supported inspection platforms. |
| listingId | string Unique PropMix listing identifier based on a listing. The listing Id may be fetched using PropMix's valuation APIs. |
| pmxPropertyId | string Unique PropMix property identifier for a property based on public records. The pmxPropertyId may be fetched using PropMix's public record APIs. |
required | object (Vendor) |
required | Array of objects (Borrower) |
object (Invoice) | |
| requestedArtifacts | Array of strings (ArtifactType) Items Enum: "report" "env" "aciXml" "oadiXml" List of artifact names. Note: the subject property must be identified by one of listingId, pmxPropertyId, or a full property address (streetAddress, city, stateOrProvince, postalCode). |
{- "orderId": "string",
- "reportType": "appraisalReport",
- "property": {
- "streetAddress": "string",
- "city": "string",
- "stateOrProvince": "string",
- "postalCode": "string",
- "displayAddress": {
- "streetAddress": "string",
- "city": "string",
- "stateOrProvince": "string",
- "postalCode": "string"
}, - "latitude": 0.1,
- "longitude": 0.1
}, - "clientInfo": {
- "clientName": "string",
- "clientFileId": "string",
- "clientAddress": {
- "streetAddress": "string",
- "city": "string",
- "stateOrProvince": "string",
- "postalCode": "string"
}
}, - "inspectionOrderId": "string",
- "inspectionProvider": "CAPTURE",
- "listingId": "string",
- "pmxPropertyId": "string",
- "vendor": {
- "firstName": "string",
- "lastName": "string",
- "email": "user@example.com",
- "vendorType": "BROKER",
- "uniqueId": "string"
}, - "borrowers": [
- {
- "firstName": "string",
- "lastName": "string",
- "fullName": "string",
- "email": "user@example.com",
- "phone": "string"
}
], - "invoice": {
- "invoiceNumber": "string",
- "billToClientName": "string",
- "billToClientAddress": "string",
- "invoiceDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "taxRate": 0,
- "taxAmount": 0,
- "invoiceItems": [
- {
- "itemName": "string",
- "itemDescription": "string",
- "unitPrice": 0,
- "quantity": 0,
- "amount": 0
}
], - "totalAmount": 0,
- "paidAmount": 0,
- "balanceAmount": 0,
- "paymentTerms": "string",
- "paymentInstructions": "string"
}, - "requestedArtifacts": [
- "report"
]
}{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string",
}Modifies an order within Profet. Note that the property address if provided will be ignored by this API; use modifyAddress to change the subject property address.
The property.displayAddress element in the JSON may be used to change the display address of the subject property.
This API will reject the request if the order is not in IN_PROGRESS or DRAFT status, or if the order is currently opened for edit by a user.
| valuationReferenceId required | string ReferenceId returned in the Initiate Order API response. |
| reportType | string (ReportType) Enum: "appraisalReport" "evaluationReport" "avmReport" "desktopAppraisalReport" "unifiedDesktopAppraisalReport" "complexityReport" "fnmaBpoExterior" "fnmaBpoInterior" One of the published report types. If a custom report is implemented for your needs the Profet team will provide you a reportType value to use. |
| orderStatus | string Enum: "PENDING_AUTOMATION" "IN_PROGRESS" "COMPLETED" "CANCELED" |
object (Property) | |
object (ClientInfo) | |
Array of objects (Borrower) | |
object (Invoice) | |
| requestedArtifacts | Array of strings (ArtifactType) Items Enum: "report" "env" "aciXml" "oadiXml" |
{- "valuationReferenceId": "string",
- "reportType": "appraisalReport",
- "orderStatus": "PENDING_AUTOMATION",
- "property": {
- "streetAddress": "string",
- "city": "string",
- "stateOrProvince": "string",
- "postalCode": "string",
- "displayAddress": {
- "streetAddress": "string",
- "city": "string",
- "stateOrProvince": "string",
- "postalCode": "string"
}, - "latitude": 0.1,
- "longitude": 0.1
}, - "clientInfo": {
- "clientName": "string",
- "clientFileId": "string",
- "clientAddress": {
- "streetAddress": "string",
- "city": "string",
- "stateOrProvince": "string",
- "postalCode": "string"
}
}, - "borrowers": [
- {
- "firstName": "string",
- "lastName": "string",
- "fullName": "string",
- "email": "user@example.com",
- "phone": "string"
}
], - "invoice": {
- "invoiceNumber": "string",
- "billToClientName": "string",
- "billToClientAddress": "string",
- "invoiceDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "taxRate": 0,
- "taxAmount": 0,
- "invoiceItems": [
- {
- "itemName": "string",
- "itemDescription": "string",
- "unitPrice": 0,
- "quantity": 0,
- "amount": 0
}
], - "totalAmount": 0,
- "paidAmount": 0,
- "balanceAmount": 0,
- "paymentTerms": "string",
- "paymentInstructions": "string"
}, - "requestedArtifacts": [
- "report"
]
}{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string"
}Modifies the subject property address for the order. When the address is modified, the order will be reset to DRAFT status and any in progress or completed work within the order will be wiped out.
This API will reject the request if the order is not in IN_PROGRESS or DRAFT status or if the order is currently opened for edit by a user.
| valuationReferenceId required | string ReferenceId returned in the Initiate Order API response. |
object Note that the displayAddress part of the property object is ignored. |
{- "valuationReferenceId": "string",
- "property": {
- "streetAddress": "string",
- "city": "string",
- "stateOrProvince": "string",
- "postalCode": "string",
- "displayAddress": {
- "streetAddress": "string",
- "city": "string",
- "stateOrProvince": "string",
- "postalCode": "string"
}, - "latitude": 0.1,
- "longitude": 0.1
}
}{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string"
}Transfers an order from one user to another. The transfer process will also reset the order such that it will be similar to a new order after the transfer.
| valuationReferenceId required | string ReferenceId returned in the Initiate Order API response. |
required | object (Vendor) |
| resetOrder | boolean Default: false If true, the order will be reset to DRAFT status with all order contents wiped out. |
{- "valuationReferenceId": "string",
- "vendor": {
- "firstName": "string",
- "lastName": "string",
- "email": "user@example.com",
- "vendorType": "BROKER",
- "uniqueId": "string"
}, - "resetOrder": false
}{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string"
}Retrieves the current order details from Profet.
| valuationReferenceId required | string ReferenceId returned in the Initiate Order API response. |
{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string",
- "data": {
- "valuationReferenceId": "string",
- "orderStatus": "PENDING_AUTOMATION",
- "orderId": "string",
- "reportType": "appraisalReport",
- "property": {
- "streetAddress": "string",
- "city": "string",
- "stateOrProvince": "string",
- "postalCode": "string",
- "displayAddress": {
- "streetAddress": "string",
- "city": "string",
- "stateOrProvince": "string",
- "postalCode": "string"
}, - "latitude": 0.1,
- "longitude": 0.1
}, - "clientInfo": {
- "clientName": "string",
- "clientFileId": "string",
- "clientAddress": {
- "streetAddress": "string",
- "city": "string",
- "stateOrProvince": "string",
- "postalCode": "string"
}
}, - "inspectionOrderId": "string",
- "inspectionProvider": "CAPTURE",
- "listingId": "string",
- "pmxPropertyId": "string",
- "vendor": {
- "firstName": "string",
- "lastName": "string",
- "email": "user@example.com",
- "vendorType": "BROKER",
- "uniqueId": "string"
}, - "borrowers": [
- {
- "firstName": "string",
- "lastName": "string",
- "fullName": "string",
- "email": "user@example.com",
- "phone": "string"
}
], - "requestedArtifacts": [
- "report"
],
}
}Downloads the completed valuation report package for an order as a single ZIP archive. The archive bundles the order's ENV file, the AI-ready PDF report, and the ACI XML mapping of the order. This API is only enabled for report types that are configured to produce the AI-ready report as the preferred PDF artifact.
| valuationReferenceId required | string ReferenceId returned in the Initiate Order API response. |
| requestedArtifacts | Array of strings (ArtifactType) Items Enum: "report" "env" "aciXml" "oadiXml" Comma separated list of artifact names from the following: report / env / aciXml / oadiXml. Example: requestedArtifacts=report,aciXml |
{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string"
}Submits a valuation file for review.
Review Types: There are two types of reviews supported and it can be indicated using the parameter “reviewType”:
Automated Review: When an automated review is requested, Profet Review will run the configured rules for the appraisal and produce the results. The results can be viewed by an authorized user but they cannot be edited. This type of review is meant for appraisers to be able to have their appraisal reviewed, view the results, make changes to the appraisal, and resubmit as many times as they need to.
An alternative use case for this review type is where the order management platform needs to obtain a review score for each appraisal uploaded.
reviewType="automated"
Manual Review: When a manual review is requested, Profet Review will run the configured rules for the appraisal and produce the results. The results can be viewed by an authorized user and in addition, an appropriately authorized user (typically a Reviewer) would be able to edit the results as well. In other words, the reviewer can add additional commentary for any rule, override the result to pass/fail a rule, and also set the overall status of the review as “Approved” or “Needs Update”. This allows for the reviewer to have a 2-way communication with an appraiser to revise and complete an appraisal. The reviewer will also have additional access to more features such as ‘Top 50 Comps’, ‘Neighborhood Analysis’, ‘Comp Analysis’ and ‘Market Conditions’ etc.
reviewType="manual"
Operations: Supports two operations via orderOptions.operation:
createOrder (default) to create a new Profet Review order for a valuation report, and
updateOrder to update an existing order with a new file.
| file | string <binary> XML / PDF file. |
| fileUrl | string <uri> Publicly accessible file url. |
required | object (OrderOptions) |
object (AdditionalOrderInformation) | |
| xml | string MISMO XML String. |
{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string",
- "data": {
- "reviewReferenceId": "string"
}
}Polls for the order status and returns the results.
| reviewReferenceId | string Reference Id from createOrder response. Either reviewReferenceId or valuationReferenceId is required. |
| valuationReferenceId | string Reference Id returned by the valuation/initiateOrder API. Either reviewReferenceId or valuationReferenceId is required. |
{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string",
- "data": {
- "reviewStatus": {
- "reviewReferenceId": "string",
- "orderId": "string",
- "reviewStatus": "Processing",
- "updateTimestamp": "string",
- "reviewResults": [
- {
- "ruleId": "string",
- "ruleName": "string",
- "ruleDescription": "string",
- "additionalRuleMessage": "string",
- "ruleImages": [
- null
], - "originalRuleStatus": "string",
- "ruleFailureMessage": "string",
- "userUpdatedRuleStatus": "string",
- "lastUpdatedBy": "string",
- "lastUpdatedOn": "2019-08-24T14:15:22Z",
- "userRuleNotes": "string",
- "isHardStopRule": true,
- "ruleGroupName": "string",
- "ruleCategory": "string",
- "comparableNumber": 0,
- "context": [
- {
- "name": "string",
- "value": "string",
- "group": "string"
}
], - "additionalInfo": [
- {
- "name": "string",
- "value": "string",
- "group": "string"
}
], - "providerComments": "string",
- "includeInReport": true,
- "reviewerComments": "string"
}
], - "reviewSummary": {
- "score": 0,
- "alert": 0,
- "warning": 0,
- "hardstop": 0,
- "error": 0,
- "risk": 0
}, - "regenerateReport": true,
- "reviewComments": "string",
- "compDetails": [
- {
- "streetAddress1": "string",
- "streetAddress2": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "comparableNumber": 0
}
], - "subjectDetails": {
- "streetAddress1": "string",
- "streetAddress2": "string",
- "city": "string",
- "state": "string",
- "zip": "string"
}
}
}
}Assigns a review order to a specific reviewer. This is required because at the time the review order is created, the reviewer may not yet be assigned.
| reviewReferenceId required | string Reference Id from review/submitForReview response. |
| assignedTo required | string <email> Email Address of the user to whom the review is assigned. In Profet email addresses serve as usernames. |
{- "status": "SUCCESS",
- "httpCode": 0,
- "type": "string",
- "message": "string"
}Downloads the review report.
| reviewReferenceId | string Review Reference Id from createOrder response. Either reviewReferenceId or valuationReferenceId is required. |
| valuationReferenceId | string Reference Id returned by the valuation initiateOrder API. Either reviewReferenceId or valuationReferenceId is required. |