GET /v2/underwriting-signals/:merchantId is the composite read for lender-agent / MCP get_trust_dossier / underwriting-portal flows resolving “should I underwrite this merchant + at what tier” in one round trip.
This endpoint is public and read-only. Aggregates data already available via the per-axis verifier endpoints (Schema B + Schema C + upgrade preview); the only new value is fewer round trips.
Request
Response (200)
The summary envelope
summary is the load-bearing decision input for lender agents:
| Field | Meaning |
|---|---|
anchorTier | max(observed-from-repayment, already-issued) — lenders never under-price a merchant who has already proven a higher tier |
totalActiveCreditLineUsdCents | Sum of maxCreditLineUsdCents across all ACTIVE Schema B attestations |
reliabilityScore | onTimeSettlements / totalSettlements * 100 (0-100); null when no settlement history yet (clean-slate semantics) |
Watch lenderCurrentStatus
For each entry in creditRisk.latestPerLender, the lenderCurrentStatus field is the last-observed registry status of the issuing lender (refreshed every 6h by the reconciler). When status: "ACTIVE" but lenderCurrentStatus is SUSPENDED / ARCHIVED / UNKNOWN, the attestation is still on-chain ACTIVE but the issuer has been de-listed — verifiers decide whether to honor it.
Discipline
- Read-only. No mints. No PII beyond per-axis verifiers.
@Public()route — same trust-handshake stance as the per-axis verifier reads.- 3 underlying queries parallelised via
Promise.all— single endpoint adds no latency over the slowest individual read.
Related
- Schema B Credit-Risk Read — single-axis verifier
- Schema C Repayment-History Read — single-axis verifier
- Upgrade Preview — just the roadmap part