Decline reason codes: what to record at the moment of the decision
In short
A decline reason code is the machine-readable statement of why a credit decision went as it did, produced by the decision itself rather than reconstructed afterwards. Bureau values, balances and documents move, so a reason recomputed from today's data is not the reason the applicant received. Capture rule and model versions, the inputs with their as-of dates, and the trigger values.
Key takeaways
- The reason is an output of the decision, not a report rebuilt from the current database.
- Snapshot every input with its as-of date and source, because a bureau re-pull returns a different file.
- Pin the ordering of reasons in versioned config, or identical applicants get different answers.
- Keep the internal rule id and the applicant-facing wording as separate, separately versioned fields.
A decline reason code is the structured statement of why a credit decision went as it did — an artefact the decision produces, in the same transaction as the outcome. What is an adverse action reason code is the narrower question: which specific principal reasons an applicant is told. Both rest on one engineering property. A reason derived later from data that has since moved is a new opinion about an old decision, not a record of it.
What to write in the same transaction as the outcome
- Policy and rule-set version. An identifier for the ruleset that ran, resolvable to its definition, not the name of the current one.
- Model identity and version, with the score and the band boundaries applied. A cutoff moved 6 months later makes yesterday's decision look arbitrary unless the boundary is stored with it.
- The input snapshot. Every value that fed the decision, with source and as-of date — not a pointer to a record that will be updated.
- The triggering conditions, with values. Rule 17 declined is not a reason; unsecured obligations of 2,340 against a threshold of 2,000 is.
- The ordered reason mapping. Which conditions became which applicant-facing statements, in what order, under which mapping version.
- Override and authority. Who could have overridden the decision, whether anyone did, on what basis.
- What was sent. The text delivered to the applicant, stored as delivered, because that is what you get asked about.
A reason recomputed later is a different reason
Every input a credit decision uses is a moving object. A bureau file re-pulled 4 months on shows a settled default, a closed card and 2 new searches; balances have turned over; a document has been replaced by a better copy. Recomputing against that state produces a defensible-looking answer nobody ever gave.
Two inputs need particular care because they are computed rather than fetched. An affordability ratio is a definition as much as a number, so a decline citing debt-to-income is reproducible only if that definition's version is stored beside it — the disagreement in your computed ratio and the underwriter's number. An income figure from bank data carries assumptions about what counted, so record the figure and its basis, not the conclusion, given how easily statement analysis overstates borrower income.
Two vocabularies, and the mapping between them
Internal condition ids and applicant-facing reasons have different lifetimes: one changes when the rule engine does, the other is a sentence a person reads. Keep both on the record with the mapping version, so rewording this year does not rewrite the reasons given last year.
| Layer | Example | Why it is stored separately |
|---|---|---|
| Triggering condition | Ratio of 0.58 against a policy maximum of 0.45 | The fact, and the only layer that is reproducible arithmetic |
| Internal reason id | A stable code for affordability outside policy | Survives rewording; what monitoring and analysis group by |
| Applicant-facing statement | Your existing commitments are high relative to your income | What the person received, and it must be retrievable exactly |
Which reason is the principal one when six rules fire
Conditions usually fail together, and something must decide which are reported and in what order. Do not leave it to the sequence rules evaluate in. Pin the ranking — materiality, then a fixed tie-break — in versioned configuration, so 2 applicants with one profile get the same reasons in the same order, and a ranking change is a dated event rather than a deployment side effect. Wording matters as much as order: a reason naming a specific factor tells the applicant what to change, where a score does not — the emit-an-action-not-a-number rule that also decides whether AI in logistics operations gets used.
A reason the applicant cannot act on is not a reason. It is a score, translated into a sentence, and it helps nobody.
What the rules require of the words themselves
Obligations differ by jurisdiction, and this is engineering guidance rather than legal advice. In the United States, Regulation B — the rule implementing the Equal Credit Opportunity Act, published by the Consumer Financial Protection Bureau — requires notification of action taken on a completed application within 30 days, and the reasons to be specific and principal. Its text treats a statement resting on internal standards, or on failing to achieve a qualifying score, as insufficient; the official interpretation notes that more than 4 reasons is unlikely to help; and reasons must accurately describe the factors actually considered. Confirm the current text with the CFPB, and take advice for each market you lend in.
The engineering consequence is constant wherever the obligation exists: accuracy is achievable only if the system recorded what it used at the time. It is the discipline that keeps a boarded loan honest, where fields are reconciled and stored rather than recomputed — the failure behind a repayment schedule wrong the moment the loan is boarded. Decisioning that emits its own evidence is ordinary AI agents and automation work inside lending and credit operations, part of the finance systems we build.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
What is a decline reason code in a lending system?
It is the structured record of why a decision went as it did, emitted by the decision itself: which conditions fired, against which values and thresholds, under which rule and model versions, and which applicant-facing statements they became. Stored that way it is reproducible; as a bare label it is an assertion nobody can check.
Why can a decline reason not be reconstructed from the database later?
Because the inputs move. A bureau file re-pulled months later shows different balances, settled defaults and new searches, and documents get replaced. Recomputing against that state yields a plausible reason that was never given. Snapshot every input with its source and as-of date, and keep it with the outcome.
How many reasons should a decline give, and in what order?
Report the principal ones, in an order pinned in versioned configuration rather than whatever sequence the rules evaluated in. Rank by materiality with a fixed tie-break, so identical profiles get identical answers. Under United States rules, the official interpretation of Regulation B says more than 4 reasons is unlikely to help the applicant — confirm the current text with the CFPB.
- lending
- credit decisioning
- auditability
- data modelling
The work behind this page
Builds from our portfolio that this page draws on.
LoanForge
An AI mortgage loan-origination platform that extracts borrower data from documents, auto-clears underwriting conditions, and drives every loan to clear-to-close.
Real EstatePipelineIQ
An AI SDR platform that scores every lead for fit, runs multichannel sequences across email, LinkedIn and call, drafts the replies, and books the meeting.
Sales AIAskVault
An AI internal knowledge-search platform that answers employee questions from your own docs — grounded in citations, with knowledge gaps surfaced and deflection tracked.
Productivity AIRead next
- First-payment default is an origination defect, not a collections eventA borrower who never makes payment one is rarely a credit decision that aged badly. The instrument was never lodged, the date was wrong, the payment went unattributed, or the income was never there.definition
- The loan tape: whether your book is legible to anyone elseA loan tape is one row per loan, assembled to a counterparty's template. It is cheap to produce only if your servicing model stores state transitions rather than current status.definition
- Underwriting conditions: the record shape that lets a rule clear oneA condition is a record, not a note. Evidence type, acceptable source, a checkable satisfaction rule, an owner and a stage gate separate a condition software can close from one only a person can.definition
- A promise to pay is a record with an expiry, not a note in a CRMAmount, date, invoices covered, channel, evidence, state. Six fields turn a collections commitment from a memory aid into something a system can act on.definition
- Invoices sit in approval for days: find the hop where it diedStop chasing approvers and start aging the hop. Time-in-hop, the resolved principal and the notification result identify the stall in minutes, and four of the five causes are configuration rather than behaviour.diagnostic
- Matching fails because the goods receipt has not been posted yetAn exception that resolves itself if left alone for two days is not a receipting failure. Measure the site's receipting lag, then let the system wait instead of a person.diagnostic
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation