Mono-Parser
Parser
Get Started

Built for Nigerian Fintechs

Contents
Table of Contents

Decision Object

The decision field inside the application.decision webhook payload contains the full scoring output. Every field listed here is always present in the response unless marked optional.

FieldTypeDescription
applicant_idstringThe applicant UUID this decision was issued for.
scorenumberOverall credit score (350–850). Higher is better.
decisionstringAPPROVED | REJECTED | MANUAL_REVIEW | COUNTER_OFFER
score_bandstringVERY_LOW_RISK | LOW_RISK | MEDIUM_RISK | HIGH_RISK | VERY_HIGH_RISK
score_breakdownobjectPoints earned per scoring component. See breakdown below.
approval_detailsobject | nullPresent when decision is APPROVED. Contains the approved loan terms. See schema below.
counter_offerobject | nullPresent when decision is COUNTER_OFFER. Contains revised terms the applicant can accept. See schema below.
eligible_tenorsarrayList of tenor options (in months) for which the applicant qualifies at the approved or offered amount. Empty when decision is REJECTED.
risk_factorsarraySignals that negatively influenced the score. Each item has factor, severity, and detail. Empty on clean applications.
manual_review_reasonsstring[]Plain-language reasons the application was flagged for human review. Present alongside MANUAL_REVIEW decisions.
explainabilityobjectHuman-readable summary with primary_reason, key_strengths[], and key_weaknesses[].
regulatory_complianceobjectCompliance flags: thin_file, identity_verified, credit_bureau_checked, affordability_assessed.
timestampstringISO 8601 timestamp of when the decision was issued.

score_breakdown

Individual points earned per scoring component. Components sum to total. Default weights shown — these shift for thin-file applicants (credit history weight drops to 0%, redistributed to income and cash flow).

FieldTypeDescription
totalnumberFinal score (350–850). Sum of baseline (350) and all earned points.
credit_historynumberPoints from credit bureau data. Weight: 30% (standard) / 0% (thin-file).
income_stabilitynumberPoints from income consistency and stream count. Weight: 25% (standard) / 35% (thin-file).
cash_flow_healthnumberPoints from inflow/outflow balance and savings capacity. Weight: 20% (standard) / 30% (thin-file).
debt_service_capacitynumberPoints from debt-to-income ratio and existing obligations. Weight: 15% (standard) / 20% (thin-file).
account_behaviornumberPoints from transaction frequency, account age, and activity patterns. Weight: 10% (standard) / 15% (thin-file).

approval_details

Present when decision is APPROVED. Contains the exact terms to present to the applicant. null for all other decision types.

FieldTypeDescription
approved_amountnumberLoan amount approved in Naira. Equal to the requested amount unless an affordability cap was applied.
approved_tenornumberApproved repayment period in months.
interest_ratenumberMonthly interest rate as a percentage (e.g. 5.0 for 5% per month).
monthly_paymentnumberCalculated monthly repayment amount in Naira.
dti_rationumberDebt-to-income ratio at the approved terms. Expressed as a decimal (e.g. 0.28 = 28% of monthly income).
conditionsstring[]Any conditions attached to the approval (e.g. salary domiciliation requirements). Empty array when unconditional.

counter_offer

Present when decision is COUNTER_OFFER. The scoring engine could not approve the original request but found a viable offer within affordability limits. Present this to the applicant as an alternative. null for all other decision types.

FieldTypeDescription
offered_amountnumberThe maximum amount the engine can approve — lower than the originally requested amount.
offered_tenornumberTenor in months for the counter offer.
monthly_paymentnumberCalculated monthly repayment at the offered terms.
reasonstringPlain-language explanation of why the original amount was reduced (e.g. affordability cap or thin-file income multiple limit).

risk_factors

Each item in risk_factors describes a specific signal that negatively influenced the decision. Safe to relay to loan officers — not to applicants directly.

json
{
  "factor":   "IDENTITY_NAME_MISMATCH",
  "severity": "HIGH",
  "detail":   "Submitted name 'John Doe' does not match account holder 'OJO DANIEL'"
}
FieldTypeDescription
factorstringMachine-readable code for the risk type (e.g. IDENTITY_NAME_MISMATCH, LOW_AVERAGE_BALANCE, IRREGULAR_INCOME).
severitystringHIGH — may have triggered immediate rejection. MEDIUM / LOW — reduced the score without a hard knockout.
detailstringHuman-readable explanation suitable for internal logging or loan officer review.