Mortgage & Loan Processing · C# SDK

Hold a loan approval until the lender’s rules agree

An underwriting agent can propose approval fast. Put the approval call behind the .NET SDK, send the loan figures it used, and your lender rules decide whether the approval goes through, waits for an underwriter, or stops.

C#: approve through GovernAsync

veriproof is one client from Veriproof.FromEnvironment(), and reviews comes from ReviewsAsync. The Profile names a review form set up in the portal.

C# · Veriproof.Sdk.Core

using Veriproof.Sdk.Core;

var result = await veriproof.GovernAsync(
    "loan.approve",
    loanFile,
    (context, cancellationToken) =>
        los.ApproveAsync(context.Input, context.IdempotencyKey, cancellationToken),
    new GovernOptions
    {
        Facts = new Dictionary<string, object?>
        {
            ["credit_score"] = loanFile.CreditScore,
            ["loan_amount"] = terms.LoanAmount,
            ["ltv_ratio"] = terms.LtvRatio,
            ["monthly_dti"] = terms.MonthlyDti,
            ["loan_purpose"] = loanFile.LoanPurpose,
            ["occupancy_type"] = loanFile.OccupancyType,
            ["undisclosed_gift_funds"] = findings.UndisclosedGiftFunds,
            ["undisclosed_seller_concessions"] = findings.UndisclosedSellerConcessions,
        },
        Review = new GovernReviewOptions
        {
            Profile = "loan-approval-review",
            ProposedActionSummary = "Approve the loan on the terms shown.",
        },
    });

await reviews.SaveIfRequiredAsync(result);

SaveIfRequiredAsync stores the checkpoint only when a rule asked for review. When the underwriter answers, a worker calls ResumeAsync and the approval runs with their response attached.

Why C# here: Many loan origination platforms and their extensions run on .NET, so the check lives next to the code that updates the file.

Send the ratios, not only the inputs

Your app calculates the loan figures. Send the results so the rule and the underwriter see the same numbers the agent did.

FactWhat it holds
credit_scoreThe score the agent used.
loan_amountPurchase price less the down payment.
ltv_ratioLoan amount divided by purchase price.
monthly_dtiMonthly debt divided by monthly income.
loan_purposepurchase, refinance, cash_out_refinance, or home_equity.
occupancy_typeprimary_residence, second_home, or investment_property.
undisclosed_gift_fundsTrue when gift funds appear that the borrower didn’t disclose.
undisclosed_seller_concessionsTrue when seller concessions appear that weren’t disclosed.

What happens to the approval

These three borrowers are the simulator’s sample files. Run loan simulator

  1. Allowed

    When: Jordan’s file clears the lender’s rules.

    Your code: ApproveAsync runs, and the decision is recorded with the rule version that allowed it.

    Who picks it up: The Business Owner sees approvals moving. Auditors read the record inside an engagement.

  2. Sent to a person

    When: Morgan’s debt share is above the automatic approval limit.

    Your code: The approval waits. The underwriter gets the loan figures and the choices available to them.

    Who picks it up: The named underwriter, in the VeriProof Inbox, by email, or in Slack or Microsoft Teams, with reminders and escalation.

  3. Stopped

    When: Taylor’s credit score is below the lender’s minimum of 680, and the agent proposed approval anyway.

    Your code: The status is Blocked. ApproveAsync never runs, and the file stays where it was.

    Who picks it up: The Governance Engineer sees the rule and version that stopped it.

Two limits, both on the record

The simulator’s app has its own minimum credit score of 620, and the lender’s rule sits at 680. The record keeps the app’s decision, the rule check, and the final outcome as separate facts, so nobody has to guess which limit applied.

Changes to the lender’s rules

Developer fix request

A new rule that reads the appraisal date needs a field your agent may not send. The Developer gets a fix request naming it, and it closes when the field arrives.

Changing the rule

Raising the credit floor from 680 to 700 can run in Shadow against live loan files first, showing what would have changed. Because the agent is in production, a compliance officer or administrator approves the engineer’s change before it enforces.

See how the six role portals hand off work

Where to go from here

See the underwriter’s side

Open the demo portal as a reviewer, then as a Governance Engineer, and follow one loan approval through both.