Mono-Parser
Parser
Get Started

Built for Nigerian Fintechs

Contents
Table of Contents

Integration Flow

The complete lifecycle of a loan application involves three required API calls on your end (plus an optional fourth for multi-account flows) and four webhook events from ours. The flow is async and webhook-driven — you never need to poll.

1
POST /applications/initiateYour call

Create the applicant and application in one call. Receive a Mono Connect widget URL and an applicationId.

2
Open the widget URLUser action

Redirect or embed the widgetUrl so your applicant can link their bank account through Mono Connect. The widget closes automatically on completion.

3
account.linked webhookWe send

We notify your webhook URL that a bank account has been linked. Enrichment (income analysis + statement insights) begins automatically. No action needed yet.

4
account.enrichment_ready webhookWe send

Enrichment for that account is complete. If you need to link an additional account, call /link-account again and repeat steps 2–4. Otherwise, proceed to finalize.

5
POST /applications/:id/finalize-linkingYour call

Signal that the applicant has finished linking all their accounts. This locks the application and makes it eligible for analysis.

6
application.ready_for_analysis webhookWe send

All linked accounts are enriched and the application is ready. The applicationId is included — use it in the next call.

7
POST /applications/:id/analyzeYour call

Trigger loan analysis. The scoring engine reads all enriched account data and runs the full credit pipeline.

8
application.decision webhookWe send

The full scored decision object — including score, band, approval details or counter-offer, and explainability — is delivered to your webhook URL.

Use application.ready_for_analysis as your trigger for /analyze. This event fires only after finalize-linking and confirms all accounts are enriched. Calling /analyze before this will return a 400 error.

Handling failures

Three webhook events can interrupt the happy path. They are not rare — handle all of them or applicants will reach a silent dead end with no way forward.

!
account.enrichment_failedWe send

Enrichment stayed PENDING for more than 20 minutes. The account could not be processed within the expected window.

Call POST /applications/:id/link-account to generate a fresh widget URL. The applicant must re-link that account.

!
application.failedWe send

A terminal error occurred during analysis — no enriched accounts were available, or the scoring engine returned an unrecoverable error.

Cannot be retried. Call /initiate to create a new application for the same applicant.

!
application.abandonedWe send

The cleanup system marked the application inactive. Either no account was linked within 24 hours (no_link), or /analyze was never called within 7 days of linking (no_analyze).

Cannot be resumed. Call /initiate with a new idempotency key. The applicant will need to re-link.