UAD 3.6 Appraisal Report Validator API

Beta. Structural checks of a UAD 3.6 URAR appraisal file against the GSE-published delivery specification and compliance rules. Product page and free test form.

Endpoint

PaidPOST https://www.spreadrun.com/api/v1/uad-36-appraisal-validator, API key required, $1.00 per completed report
DemoPOST https://www.spreadrun.com/api/demo/uad-36-appraisal-validator, no key, 1 MB, 10 runs per day
BodyThe UAD 3.6 URAR XML file, or the UAD 3.6 ZIP package. Any Content-Type; ZIP is detected from the content.

Request

Send the file itself as the request body, up to 4.4 MB (HTTP 413 above that). A ZIP must hold exactly one UAD XML file (MESSAGE root); its PDF and photos are not checked. If the package is over the limit because of photos, send the XML file on its own.

Query parameterDefaultMeaning
asOftoday (UTC)A date, YYYY-MM-DD. Rules UAD1258, UAD1259, UAD1505 and UAD1506 compare the effective date and the signature date with it: not in the future, not more than 367 days old. Use it to check an older report as of the date it was signed.

Rejected with HTTP 400 and not charged: an empty body, a file that is not well-formed XML, DOCTYPE or entity declarations, a root that is not the MISMO MESSAGE element, a MISMOReferenceModelIdentifier other than 3.6, a missing or non-URAR report type (Appraisal Update and Completion Reports included), a ZIP without exactly one UAD XML file, an invalid asOf. A URAR file with problems is not an input error: it gets a completed FAIL report, and that run is charged.

Coverage

The whole file is checked; nothing is sampled. Sources: Appendix A-1: URAR Delivery Specification (UAD Delivery Spec 1.4) and Appendix H-1: URAR Compliance Rules (UAD Compliance Rules v1.5).

  • Delivery specification: 810 data point and attribute locations, with their supported values, formats, required flags and repeat limits. See rule IDs.
  • Compliance rules: 585 of 728 implemented (480 fatal, 105 warning). A rule is evaluated for each property and container instance it applies to, with three-valued logic: when the file leaves a condition undetermined (a value the condition needs is missing or ambiguous), the rule does not fire. The rest are listed below.
  • Not checked: MISMO XSD schema validation, GSE proprietary findings, the PDF and photos in a package, and whether values are true.

Tested against the twelve GSE sample scenarios for UAD 3.6 (single-family, condominium, cooperative, manufactured home and 2- to 4-unit): every one passes with no findings when checked as of its signature date. Where this validator and the Delivery Specification differ, the Delivery Specification controls. SpreadRun is not affiliated with or endorsed by Fannie Mae or Freddie Mac.

Report

FieldMeaning
statusFAIL if any error, WARN if only warnings, otherwise PASS. A PASS is not UCDP acceptance.
reportType, reportContentIdentifierURAR, and the ValuationReportContentIdentifier from the file.
mismoReferenceModelIdentifierFrom the MESSAGE root, for example 3.6.0366.
inputcontainer (xml or zip), xmlBytes, and a note when a package was sent.
propertiesCount of valuation PROPERTY elements by @ValuationUseType.
findingsUp to 500, errors first. Each has severity (error or warning), ruleId, path (XPath-style, with [n] where a container repeats), message, and specReference (the rule's or data point's unique ID in the appendix) when there is one.
findingCount, findingCounts, ruleCounts, findingsTruncatedTotals, including findings beyond the 500 listed.
coveragecomplianceRulesTotal, complianceRulesEvaluated, complianceRulesNotImplemented (rule IDs), deliverySpecChecks, sampling.
asOfThe date the clock-based rules were evaluated against.
inputSha256SHA-256 of the request body.
scopeWhat the verdict covers, in one sentence.

Rule IDs

Compliance rule findings use the GSE message ID (UAD and four digits) and its message text, with Fatal rules as errors and Warning rules as warnings. Delivery specification checks use these IDs:

RuleSeverityMeaning
A1-UNKNOWNwarningAn element at a location the URAR Delivery Specification does not define. Reported once per path, at the outermost unknown element.
A1-ENUMerrorAn enumerated or boolean data point, or an attribute such as @ValuationUseType, holds a value that is not in its supported list. The message lists the supported values; the value sent is never repeated.
A1-FORMATerrorA date, datetime, number or text value does not match the format the specification gives for it (date pattern, sign, digits before and after the decimal point, maximum length).
A1-EMPTYerrorA data point element is present with no value.
A1-REQUIREDerrorA data point the specification always requires (R) is missing from a container that is present. Only checked where the path has one meaning for that property type.
A1-CARDINALITYerrorA container repeats more often under one parent than the specification allows for that property type.

Example responses

A paid check of the synthetic URAR sample with asOf=2019-09-20, and a demo check of the sample with six deliberate errors. Both generated by running the real endpoint code. The paid example's report is shortened here to its first fields.

{
  "requestId": "7f3c2a1e-5b8d-4c6f-9e0a-1d2b3c4d5e6f",
  "api": "uad-36-appraisal-validator",
  "mode": "paid",
  "charged": true,
  "priceCents": 100,
  "balanceCents": 825,
  "report": {
    "schemaVersion": 1,
    "status": "PASS",
    "reportType": "URAR",
    "reportContentIdentifier": "URAR Delivery Specification v1.4",
    "mismoReferenceModelIdentifier": "3.6.0366",
    "input": {
      "container": "xml",
      "xmlBytes": 143406,
      "note": null
    },
    "properties": {
      "PropertyAnalyzedNotUsed": 5,
      "SalesComparable": 3,
      "SubjectProperty": 1
    },
    "findingCount": 0,
    "findingCounts": {
      "error": 0,
      "warning": 0
    },
    "ruleCounts": {},
    "findings": [],
    "findingsTruncated": false,
    "coverage": {
      "complianceRulesTotal": 728,
      "complianceRulesEvaluated": 585,
      "complianceRulesNotImplemented": [
        "143 rule IDs"
      ],
      "deliverySpecChecks": [
        "A1-UNKNOWN",
        "A1-ENUM",
        "A1-FORMAT",
        "A1-EMPTY",
        "A1-REQUIRED",
        "A1-CARDINALITY"
      ],
      "sampling": "none: every element in the file is checked"
    },
    "sources": {
      "a1": {
        "title": "Appendix A-1: URAR Delivery Specification",
        "sheet": "UAD Delivery Spec 1.4"
      },
      "h1": {
        "title": "Appendix H-1: URAR Compliance Rules",
        "sheet": "UAD Compliance Rules v1.5"
      }
    },
    "inputSha256": "bd92ed33abad081caf83e416d495113b2aac86d77a2cb87e7b0e5721c32a0241",
    "scope": "Structural checks against the GSE-published UAD 3.6 URAR delivery specification and compliance rules. A PASS does not mean UCDP acceptance, and this is not legal or compliance advice.",
    "asOf": "2019-09-20"
  }
}
[
  {
    "severity": "error",
    "ruleId": "A1-ENUM",
    "path": "/MESSAGE/DOCUMENT_SETS/DOCUMENT_SET/DOCUMENTS/DOCUMENT/DEAL_SETS/DEAL_SET/DEALS/DEAL/SERVICES/SERVICE/VALUATION/VALUATION_RESPONSE/VALUATION_ANALYSES/VALUATION_ANALYSIS/PROPERTIES/PROPERTY[1]/PROPERTY_DETAIL/NativeAmericanLandsIndicator",
    "message": "NativeAmericanLandsIndicator is not a supported UAD value. Supported: false, true.",
    "specReference": "0100.0054"
  },
  {
    "severity": "error",
    "ruleId": "A1-ENUM",
    "path": "/MESSAGE/DOCUMENT_SETS/DOCUMENT_SET/DOCUMENTS/DOCUMENT/DEAL_SETS/DEAL_SET/DEALS/DEAL/SERVICES/SERVICE/VALUATION/VALUATION_RESPONSE/VALUATION_ANALYSES/VALUATION_ANALYSIS/PROPERTIES/PROPERTY[1]/PROPERTY_DETAIL/OverallConditionRatingCode",
    "message": "OverallConditionRatingCode is not a supported UAD value. Supported: C1, C2, C3, C4, C5, C6.",
    "specReference": "1600.0006"
  },
  {
    "severity": "error",
    "ruleId": "A1-FORMAT",
    "path": "/MESSAGE/DOCUMENT_SETS/DOCUMENT_SET/DOCUMENTS/DOCUMENT/DEAL_SETS/DEAL_SET/DEALS/DEAL/SERVICES/SERVICE/VALUATION/VALUATION_RESPONSE/VALUATION_ANALYSES/VALUATION_ANALYSIS/VALUATION_REPORT/VALUATION_RECONCILIATION/VALUATION_RECONCILIATION_SUMMARY/VALUATION_RECONCILIATION_SUMMARY_DETAIL/AppraisalReportEffectiveDate",
    "message": "AppraisalReportEffectiveDate must be a date in YYYY-MM-DD format.",
    "specReference": "1300.0012"
  },
  {
    "severity": "error",
    "ruleId": "A1-REQUIRED",
    "path": "/MESSAGE/DOCUMENT_SETS/DOCUMENT_SET/DOCUMENTS/DOCUMENT/DEAL_SETS/DEAL_SET/DEALS/DEAL/SERVICES/SERVICE/VALUATION/VALUATION_RESPONSE/VALUATION_ANALYSES/VALUATION_ANALYSIS/PROPERTIES/PROPERTY[1]/ADDRESS/PostalCode",
    "message": "PostalCode is required in every ADDRESS by the delivery specification.",
    "specReference": "0100.0011"
  }
]

Compliance rules not implemented

143 rules. None of them can produce a finding. Each needs a reading the published rule text does not settle, so it is left out rather than guessed.

RuleSeverityWhy not
UAD1030FatalDate arithmetic, sums or nested conditions
UAD1037FatalWording without one unambiguous machine reading
UAD1043FatalWording without one unambiguous machine reading
UAD1048FatalDate arithmetic, sums or nested conditions
UAD1051WarningDate arithmetic, sums or nested conditions
UAD1053WarningDate arithmetic, sums or nested conditions
UAD1058WarningDate arithmetic, sums or nested conditions
UAD1062FatalDate arithmetic, sums or nested conditions
UAD1068FatalDate arithmetic, sums or nested conditions
UAD1070FatalDate arithmetic, sums or nested conditions
UAD1075WarningDate arithmetic, sums or nested conditions
UAD1080FatalDate arithmetic, sums or nested conditions
UAD1086FatalRow-by-row comparison across all comparables
UAD1089FatalDate arithmetic, sums or nested conditions
UAD1121FatalDate arithmetic, sums or nested conditions
UAD1123FatalDate arithmetic, sums or nested conditions
UAD1138FatalDate arithmetic, sums or nested conditions
UAD1142FatalDate arithmetic, sums or nested conditions
UAD1143WarningDate arithmetic, sums or nested conditions
UAD1149FatalWording without one unambiguous machine reading
UAD1150FatalDate arithmetic, sums or nested conditions
UAD1152FatalWording without one unambiguous machine reading
UAD1154FatalDate arithmetic, sums or nested conditions
UAD1164FatalWording without one unambiguous machine reading
UAD1177FatalWording without one unambiguous machine reading
UAD1179WarningWording without one unambiguous machine reading
UAD1183FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1192FatalDate arithmetic, sums or nested conditions
UAD1199FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1200FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1201FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1202FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1207FatalDate arithmetic, sums or nested conditions
UAD1209FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1228WarningWording without one unambiguous machine reading
UAD1237FatalDate arithmetic, sums or nested conditions
UAD1239WarningWording without one unambiguous machine reading
UAD1250WarningRow-by-row comparison across all comparables
UAD1255FatalDate arithmetic, sums or nested conditions
UAD1256FatalDate arithmetic, sums or nested conditions
UAD1261FatalWording without one unambiguous machine reading
UAD1268FatalDate arithmetic, sums or nested conditions
UAD1272WarningWording without one unambiguous machine reading
UAD1274FatalWording without one unambiguous machine reading
UAD1278FatalWording without one unambiguous machine reading
UAD1283FatalWording without one unambiguous machine reading
UAD1287FatalDate arithmetic, sums or nested conditions
UAD1289FatalDate arithmetic, sums or nested conditions
UAD1292FatalDate arithmetic, sums or nested conditions
UAD1296FatalDate arithmetic, sums or nested conditions
UAD1299FatalDate arithmetic, sums or nested conditions
UAD1302FatalWording without one unambiguous machine reading
UAD1304FatalDate arithmetic, sums or nested conditions
UAD1310WarningDate arithmetic, sums or nested conditions
UAD1313FatalDate arithmetic, sums or nested conditions
UAD1320FatalDate arithmetic, sums or nested conditions
UAD1323FatalDate arithmetic, sums or nested conditions
UAD1325WarningDate arithmetic, sums or nested conditions
UAD1328FatalDate arithmetic, sums or nested conditions
UAD1331FatalDate arithmetic, sums or nested conditions
UAD1335WarningDate arithmetic, sums or nested conditions
UAD1339FatalWording without one unambiguous machine reading
UAD1344FatalWording without one unambiguous machine reading
UAD1352FatalDate arithmetic, sums or nested conditions
UAD1355FatalDate arithmetic, sums or nested conditions
UAD1357WarningDate arithmetic, sums or nested conditions
UAD1361FatalDate arithmetic, sums or nested conditions
UAD1370FatalDate arithmetic, sums or nested conditions
UAD1375FatalWording without one unambiguous machine reading
UAD1378FatalWording without one unambiguous machine reading
UAD1398FatalDate arithmetic, sums or nested conditions
UAD1400FatalDate arithmetic, sums or nested conditions
UAD1405FatalDate arithmetic, sums or nested conditions
UAD1421FatalDate arithmetic, sums or nested conditions
UAD1439FatalWording without one unambiguous machine reading
UAD1445FatalDate arithmetic, sums or nested conditions
UAD1450FatalDate arithmetic, sums or nested conditions
UAD1455WarningRow-by-row comparison across all comparables
UAD1461FatalDate arithmetic, sums or nested conditions
UAD1468FatalWording without one unambiguous machine reading
UAD1470FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1477FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1529FatalDate arithmetic, sums or nested conditions
UAD1533WarningWording without one unambiguous machine reading
UAD1535FatalWording without one unambiguous machine reading
UAD1543FatalDate arithmetic, sums or nested conditions
UAD1570FatalDate arithmetic, sums or nested conditions
UAD1574FatalDate arithmetic, sums or nested conditions
UAD1575FatalDate arithmetic, sums or nested conditions
UAD1603FatalDate arithmetic, sums or nested conditions
UAD1611WarningDate arithmetic, sums or nested conditions
UAD1614FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1622WarningDate arithmetic, sums or nested conditions
UAD1656FatalWording without one unambiguous machine reading
UAD1657WarningWording without one unambiguous machine reading
UAD1658FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1667FatalDate arithmetic, sums or nested conditions
UAD1680FatalDate arithmetic, sums or nested conditions
UAD1683FatalDate arithmetic, sums or nested conditions
UAD1685FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1686FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1687FatalWording without one unambiguous machine reading
UAD1689FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1690FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1691FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1692FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1693FatalDate arithmetic, sums or nested conditions
UAD1694FatalRow-by-row comparison across all comparables
UAD1695WarningDate arithmetic, sums or nested conditions
UAD1696WarningDate arithmetic, sums or nested conditions
UAD1698FatalWording without one unambiguous machine reading
UAD1699FatalNames a data point or container the delivery specification does not define at that location
UAD1700FatalNames a data point or container the delivery specification does not define at that location
UAD1701FatalNames a data point or container the delivery specification does not define at that location
UAD1715WarningWording without one unambiguous machine reading
UAD1717FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1718FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1719FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1720FatalWording without one unambiguous machine reading
UAD1722FatalWording without one unambiguous machine reading
UAD1730WarningWording without one unambiguous machine reading
UAD1733FatalDate arithmetic, sums or nested conditions
UAD1734FatalDate arithmetic, sums or nested conditions
UAD1741FatalWording without one unambiguous machine reading
UAD1742WarningWording without one unambiguous machine reading
UAD1743WarningWording without one unambiguous machine reading
UAD1746FatalDate arithmetic, sums or nested conditions
UAD1747FatalLinks between parts of the report (RELATIONSHIP / xlink)
UAD1748WarningWording without one unambiguous machine reading
UAD1749WarningWording without one unambiguous machine reading
UAD1758WarningWording without one unambiguous machine reading
UAD1759FatalWording without one unambiguous machine reading
UAD1763FatalWording without one unambiguous machine reading
UAD1764FatalWording without one unambiguous machine reading
UAD1765FatalWording without one unambiguous machine reading
UAD1766FatalWording without one unambiguous machine reading
UAD1767FatalWording without one unambiguous machine reading
UAD1768FatalWording without one unambiguous machine reading
UAD1769FatalDate arithmetic, sums or nested conditions
UAD1774FatalDate arithmetic, sums or nested conditions
UAD1777WarningWording without one unambiguous machine reading
UAD1778WarningWording without one unambiguous machine reading
UAD1779WarningWording without one unambiguous machine reading

Evident typos in the published rule text that were corrected so the rule can run: UAD1097 ("in in" read as "in"); UAD1099 ("IMRPOVEMENT" read as "IMPROVEMENT"); UAD1108 ("ConstructionMethod" read as "ConstructionMethodType"); UAD1110 ("ConstructionMethod" read as "ConstructionMethodType"); UAD1116 ("ConstructionMethod" read as "ConstructionMethodType"); UAD1117 ("ConstructionMethod" read as "ConstructionMethodType"); UAD1119 ("ConstructionMethod" read as "ConstructionMethodType"); UAD1120 ("ConstructionMethod" read as "ConstructionMethodType").

Errors

See the shared error table. Example input error (HTTP 400, not charged):

{
  "error": {
    "code": "input_error",
    "message": "The root element must be MESSAGE in the MISMO residential namespace (http://www.mismo.org/residential/2009/schemas). This does not look like a MISMO appraisal file.",
    "requestId": "7f3c2a1e-5b8d-4c6f-9e0a-1d2b3c4d5e6f",
    "charged": false
  }
}

Code samples

# XML file
curl -X POST "https://www.spreadrun.com/api/v1/uad-36-appraisal-validator" \
  -H "Authorization: Bearer $SPREADRUN_API_KEY" \
  -H "Content-Type: application/xml" \
  --data-binary @appraisal.xml

# UAD 3.6 ZIP package, date rules as of the signature date
curl -X POST "https://www.spreadrun.com/api/v1/uad-36-appraisal-validator?asOf=2026-09-15" \
  -H "Authorization: Bearer $SPREADRUN_API_KEY" \
  -H "Content-Type: application/zip" \
  --data-binary @appraisal_package.zip