Developers

API reference

REST and JSON over HTTPS. Every /v1 call takes Authorization: Bearer <api key>. Each tenant gets 600 requests a minute; responses carry X-RateLimit-* headers, and going over returns 429 with Retry-After.

Quick start

Check a report in one call. Issues name the GSE rule (ruleId) and the form field (fieldId) to fix. Severity is error for Fatal findings and warning for Warnings.

curl https://uadengine.com/v1/validate \
  -H "Authorization: Bearer $UAD_API_KEY" \
  -H "Content-Type: application/xml" \
  --data-binary @report.xml
Response · 200 OK
{
  "valid": false,
  "issues": [
    {
      "severity": "error",
      "ruleId": "UAD1002",
      "fieldId": "subject.city",
      "message": "Provide the city name for the subject property physical address.",
      "path": "/MESSAGE/.../ADDRESS/CityName"
    }
  ]
}

Compliance checks

MethodPathWhat it does
POST/v1/validateStateless check. Send UAD 3.6 XML, get {valid, issues[]} back. Nothing is stored.
POST/v1/packages/preflightCheck a UCDP delivery package (ZIP: XML + PDF + Images/). Returns SYS9001–SYS9010 findings plus the H-1, H-2 or H-3 findings for the report type.
GET/v1/rulesThe compliance rules with severity, message and whether each is automated. ?report=ValuationUpdate (H-2) or ValuationCompletion (H-3).
GET/v1/fieldsForm fields with labels, sections, value kinds, options, Report Field IDs and A-1 maximum lengths. ?report=update or completion.

Reports

MethodPathWhat it does
POST/v1/reportsCreate from JSON {type?, externalRef?, values?} or import an XML body. type is AppraisalReport (URAR), ValuationUpdate or ValuationCompletion.
GET/v1/reportsList reports.
GET/v1/reports/:id{id, type, values, …}
PATCH/v1/reports/:idUpdate field values: {"values": {"subject.city": "Treeville"}}. null clears a field; invalid values are rejected per field.
DELETE/v1/reports/:idDelete a report. Its audit log is kept.
PUT/v1/reports/:id/xmlReplace the report with new XML.
GET/v1/reports/:id/xmlDownload the MISMO 3.6 XML.
POST/v1/reports/:id/validateRequired fields, structure, the GSE XSD and the compliance rules. Issues carry fieldId and ruleId.
GET/v1/reports/:id/pdfThe report PDF, laid out to the GSE style guide.
GET/v1/reports/:id/packageA UCDP delivery package (ZIP) for the report.
PUT/v1/reports/:id/images/:nameUpload a photo, map or sketch, named as the XML references it under Images/. GET fetches it, DELETE removes it.
GET/v1/reports/:id/eventsThe report's audit log, newest first.

Embedding and tenant

MethodPathWhat it does
POST/v1/reports/:id/embed-tokensBrowser-safe token for one report ({ttlSeconds?, readOnly?}).
GET/v1/tenantBranding (displayName, logoUrl, primaryColor, fontFamily) and software identity. PATCH to change.
GET/v1/eventsThe tenant's whole audit log.
GET/v1/usageUsage for a calendar month (?month=2026-11): counts per action plus billable totals.

Embed the form

Mint a token on your server with POST /v1/reports/:id/embed-tokens, then drop the web component into your page. Never put an API key in a page. Theme it with CSS variables on the element: --uad-primary, --uad-font, --uad-radius.

index.html
<script src="https://uadengine.com/embed.js" defer></script>
<uad-form api="https://uadengine.com"
          report="rpt_8f2k…" token="emb_…"></uad-form>

Need a key? Email [email protected]