Skip to content
RateStack
Capability · Smart loan import

Smart loan import: vendor-native, AI-assisted, idempotent.

Named vendor profiles for known LOS exports (Encompass Standardized Report lands 400 fields out of the box). AI-assisted type-aware mapping with tiered apply gates and top-K fallback for unknown shapes. MISMO 3.4 / ULAD / native JSON. Tolerant coercion for vendor format quirks. SHA-256 fingerprint idempotency.

Overview

What it is, in one paragraph

Loan import accepts MISMO 3.4 XML, ULAD XML, RateStack native JSON, and curated vendor profiles (Encompass Standardized Report CCL ships with all 400 rows mapped). For unknown shapes, the pipeline runs a tiered apply gate over an AI-assisted type-aware mapper with top-K fallback. Tolerant coercion handles vendor format quirks (Active / Enabled / Waived → boolean, NA / null → null). SHA-256 fingerprint guarantees idempotent retries. Validation errors return 422 with RFC 7807 problem details pointing at the offending field. The borrowers[0..N] unified namespace handles multi-borrower loans with identical field shapes.

  • Vendor profiles

    Encompass Standardized Report (CCL) ships with 400 fields mapped. Calyx, MISMO, ULAD also built-in. Custom profiles take days, not quarters.

  • AI-assisted mapping

    Unknown shapes route through a type-aware mapper with tiered apply gates. Top-K fallback for ambiguous rows; below-threshold lands in QC.

  • Tolerant coercion

    TolerantCoercionModule handles boolean variants (Waived, Active, Enabled), loose BigDecimal (NA, null, locale decimals), and permissive date parsing.

  • MISMO 3.4 + ULAD native

    Round-trip safe MISMO XML and ULAD XML. Borrower, loan, property, transaction, execution all populate from canonical containers.

  • Multi-borrower namespace

    borrowers[0..N] unified shape. Index 0 is the primary; the rest are co-borrowers with identical fields. URLA 2021 Tiers 1–5 complete.

  • DocumentationType expansion

    40+ documentation types: FULL, BANK_STMT, DSCR, ASSET, ITIN, STREAMLINE, NO_DOC. Powers non-QM and DSCR lanes.

  • Fingerprint idempotency

    Imports are keyed on SHA-256 of the payload. Re-importing the same file is free and returns the same loanId.

  • Admin observability endpoints

    Per-import audit trail with the mapper path used per row, fallback rows, confidence scores, and operator overrides.

How it works

The pipeline, end to end.

Numbered steps from input to output. Each step maps to a specific subsystem you can inspect via OpenTelemetry.

  1. 1

    POST the payload (optionally with profile=…)

    Set Content-Type and pass the payload body. Profile slug as a query parameter bypasses the generic mapper when the shape is known.

  2. 2

    Fingerprint check

    Server computes SHA-256 of the body. If a prior import has the same fingerprint, the existing loan is returned — no duplicate row.

  3. 3

    Profile fast path

    If a profile is named, the curated mapping runs first. Tolerant coercion absorbs format quirks; unmapped rows fall through to the generic mapper with provenance recorded.

  4. 4

    Generic mapper for unknowns

    Three-tier resolver: stored template → AI type-aware mapper → regex heuristic. Tiered apply gate decides which result wins; top-K fallback for ambiguous columns.

  5. 5

    Validate

    Validator runs cross-field checks (LTV consistency, occupancy/doc combinations, state-specific overlays). 422 on hard errors with field paths; warnings on soft.

  6. 6

    Persist + emit

    Loan persists with status NEW; ImportSummary row records mapper provenance; loans.imported fires on NATS with the loanId, fingerprint, profile, and warnings.

  7. 7

    Ready to price

    Pass loanId to /v1/pricing — or run an immediate eligibility check if you want a fast feedback loop.

Hands on

Vendor-profile import vs. MISMO import

Live cURL sample — copy, paste, ship.

# Encompass-native: pass profile=… and we bypass the generic mapper
curl -X POST "https://api.ratestack.com/v1/loans/import?\
profile=encompass-standardized-report-ccl&importedByUserId=$ME&ownerUserId=$OWNER" \
  -H "X-API-Key: $RATESTACK_KEY" \
  -H "Content-Type: text/csv" \
  --data-binary @encompass-export.csv

# MISMO 3.4: drop the profile and let content-type select the parser
curl -X POST "https://api.ratestack.com/v1/loans/import?\
importedByUserId=$ME&ownerUserId=$OWNER" \
  -H "X-API-Key: $RATESTACK_KEY" \
  -H "Content-Type: application/xml" \
  --data-binary @application.mismo.xml

# 200 OK — loan was created with normalized fields + profile/mapper provenance
# {
#   "loanId":      "loan_C1c8a4ed",
#   "fingerprint": "sha256:f57a8d2c...",
#   "profile":     { "slug": "encompass-standardized-report-ccl", "version": "2026-05-15",
#                    "rowsMapped": 400, "rowsFallback": 0 },
#   "warnings":    [],
#   "normalized":  { "borrower": { ... }, "borrowers": [ ... ], "property": { ... }, ... }
# }

Why this matters

The pain it removes.

Known vendor shapes are free

Encompass exports land on day one with all 400 fields. No AI fee, no QC pass, no mapping drift. The work is already done.

Unknown shapes don't block

When a vendor changes a column or you onboard a new LOS, the AI mapper runs with explicit confidence and QC routing — not a silent miss.

Non-QM is first-class

DSCR, bank statement, asset utilization, ITIN — all carry their own documentation types and relevance rules. The 1003 reflows for the lane.

Frequently asked

Direct answers, no marketing spin.

How do we onboard a new LOS?

Send a representative export to onboarding; profiles take days. In the interim, the AI mapper handles it with explicit QC routing for low-confidence rows.

What MISMO versions do you support?

3.4 is the canonical target. We accept 3.5 documents that don't introduce breaking schema changes for the fields we read; out-of-spec extensions are ignored with warnings.

Can we bulk-import?

Yes. Bulk endpoints support batched payloads with per-row idempotency. Admin observability lets you see mapper paths, fallbacks, and warnings per row in one report.

How is multi-borrower handled?

borrowers[0..N]. Index 0 is the primary borrower (formerly 'Borrower'); the rest are co-borrowers (formerly 'CoBorrower') with identical field shapes. The unification eliminates aliasing across MISMO containers.

What DocumentationTypes are supported?

40+ types covering full-doc, bank statement, DSCR, asset utilization, ITIN, streamline, no-doc, and more. Each carries its own relevance rules in the Smart 1003.

Are imports audited?

Every import writes an ImportSummary row with the mapper path used per row, fallback row count, warnings, and any operator overrides. Audit-chained into common_audit_log.

Ready to see it on your data?

Wire smart loan import: vendor-native, ai-assisted, idempotent. up to your real workflow.

We'll spin you a sandbox, load your actual ratesheets, and walk you through this capability against your top scenarios.

Smart loan import — Encompass-native + AI + MISMO 3.4 | RateStack