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.
POST /applications/initiateYour callCreate the applicant and application in one call. Receive a Mono Connect widget URL and an applicationId.
Open the widget URLUser actionRedirect or embed the widgetUrl so your applicant can link their bank account through Mono Connect. The widget closes automatically on completion.
account.linked webhookWe sendWe notify your webhook URL that a bank account has been linked. Enrichment (income analysis + statement insights) begins automatically. No action needed yet.
account.enrichment_ready webhookWe sendEnrichment 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.
POST /applications/:id/finalize-linkingYour callSignal that the applicant has finished linking all their accounts. This locks the application and makes it eligible for analysis.
application.ready_for_analysis webhookWe sendAll linked accounts are enriched and the application is ready. The applicationId is included — use it in the next call.
POST /applications/:id/analyzeYour callTrigger loan analysis. The scoring engine reads all enriched account data and runs the full credit pipeline.
application.decision webhookWe sendThe full scored decision object — including score, band, approval details or counter-offer, and explainability — is delivered to your webhook URL.
/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 sendEnrichment 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 sendA 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 sendThe 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.