Bank onboarding with OTP verification

Credit card application in three steps, with an SMS code and an automatic response in a few minutes.

Four screens of the credit card application flow on a phone: personal details, number verification by SMS code, approved result and not approved result, with the personal and institution data blurred

What was needed

An online credit card application for a financial institution, designed so that people know in a few minutes whether they can continue, without going to a branch or standing in line. It had to confirm identity by phone and evaluate the application automatically.

What I built

A Laravel application with a three-step flow that is completed from the phone:

  • Details: a form with ID number (cédula), last names, first names, phone, province and city (the city depends on the chosen province) and email. It explains how to write the data exactly as it appears on the ID card.
  • Verification: a 6-digit code is sent by SMS to the registered number, which is shown partially hidden. The person enters it, can ask for a resend or go back. An additional SMS confirms they accepted the terms and conditions.
  • Result: the application queries a credit bureau web service and instantly shows one of two answers. If the application moves forward, it shows the suggested category and limit and a reference number. If it doesn’t meet the criteria, it explains the reason in general terms and invites the person to try again after three months. In both cases the ID number and phone are shown masked.

The bureau queries run in a queue job with retries, on Redis and Docker. The SMS codes are sent through the Massend messaging platform, resending the code has a limit and the form has bot protection. If an external provider fails several times in a row, the system alerts the team. It has an admin panel for the team.

Result

Phone validation and evaluation are done without manual intervention, and the person gets the answer on the same screen. I built it together with Actihost, with SMS from Massend.