Inspiration
In Canada's growing fintech landscape, lending platforms handle thousands of loan applications daily — and with each one comes a borrower anxiously waiting for updates. "What's my status?" "Why was I denied?" "What documents do I still need?" These questions flood support lines, burning human agent hours on repetitive, lookupable answers.
We work on JUDI, a digital lending platform that integrates with credit bureaus like Experian (VantageScore, IntelliScore) and financial data aggregators (Yodlee, Flinks, MX, Sophtron). We see this pain firsthand. Borrowers — many of them newcomers to Canada navigating the credit system for the first time — deserve instant, accurate answers without sitting on hold. We asked ourselves: what if a borrower could simply talk to an AI agent, verify their identity securely, and get real answers about their loan — all in under two minutes?
What it does
JUDI Loan Status Hotline is a browser-based AI voice agent that lets borrowers speak naturally to check on their loan application. Here's what happens:
- The borrower opens our web widget and clicks "Talk to JUDI Support"
- The AI agent greets them and asks for the email associated with their loan
- A one-time verification code is sent to their email — they read it back to the agent
- Once verified, the borrower asks anything: "Why was my application denied?", "What credit score do you need?", "How long does underwriting take?"
- The agent searches a verified knowledge base and speaks the answer back conversationally
- The borrower can keep asking follow-up questions or hang up when satisfied
No phone line. No hold music. No human agent needed for the top 80% of support questions.
How we built it
We integrated three sponsor tools into a single, tightly coupled conversation loop — not as separate features, but as components of one seamless voice experience:
- Bland AI — Powers the conversational voice agent using their Web Agent SDK. We designed a multi-node Pathway in Bland's visual editor that handles greeting, email collection, OTP verification, a question-answer loop, and graceful goodbye. At key moments, the pathway triggers webhook calls to our middleware.
- Auth0 — Handles identity verification via passwordless email OTP. When the agent collects a borrower's email, our server calls Auth0's /passwordless/start endpoint to send a 6-digit code. When the borrower reads it back, we verify it against Auth0's /oauth/token endpoint. No passwords, no SMS — just a secure, frictionless email code.
- Senso — Serves as the verified knowledge base. We loaded 15 documents covering JUDI loan policies: credit score thresholds (VantageScore 620 minimum), denial reasons, document requirements, bank verification via Yodlee, underwriting timelines, interest rates, and more. When a borrower asks a question, our server queries Senso's /search API and returns the most relevant answer to Bland.
The glue is a lightweight Node.js + Express middleware server with three webhook endpoints, tunneled via ngrok. Bland calls our server, our server calls Auth0 or Senso, and the response flows back into the live conversation.
Architecture:
Browser (Bland Web Agent) │ ├── Webhook 1 → Express → Auth0 /passwordless/start (send OTP) ├── Webhook 2 → Express → Auth0 /oauth/token (verify OTP) └── Webhook 3 → Express → Senso /search (answer question)
Challenges we ran into
- OTP timing in a voice conversation. Email delivery isn't instant. We had to tune the Bland pathway to give borrowers ~30 seconds to check their inbox and read back the code, with a natural-sounding "take your time, I'll wait" prompt instead of awkward silence.
- No phone calls abroad. We're presenting from outside Canada with no access to a local phone line. We pivoted from Bland's telephony API to their Web Agent SDK, embedding the voice agent directly in a browser page. This actually turned out better — a branded web widget looks more polished than "dial this number."
- Senso search relevance tuning. Early tests returned partial matches or wrong documents for questions like "why was I denied?" We refined our KB entries to be more question-shaped and added explicit keywords. The difference between a good and bad knowledge base entry is huge.
- Bland variable extraction. Getting the agent to reliably capture a 6-digit OTP code spoken aloud took iteration. We added confirmation prompts ("I heard 4-8-2-1-0-3, is that correct?") to reduce errors.
- Coordinating two people on a 5-hour clock. We split work in parallel from minute one — one person on Bland + the Express server, the other on Auth0 + Senso. We synced at hour 3 for integration. Having the architecture planned beforehand was critical.
Accomplishments that we're proud of
- Three sponsor tools, one conversation loop. This isn't three tools bolted together — every single borrower interaction flows through all three. Auth0 secures the door, Senso provides the brain, Bland is the voice. Remove any one and it breaks.
- It actually works live. A judge can open the page, talk to the agent, receive a real OTP to their email, verify it by voice, and get accurate answers about JUDI loan policies. End to end, in under two minutes.
- 15-document knowledge base covering real lending scenarios: VantageScore requirements, debt-to-income ratios, Yodlee bank verification, adverse action notices, appeal timelines. This isn't a toy demo — it reflects real borrower questions.
- Built in 5 hours by a two-person team, from zero to working live demo with authentication, knowledge retrieval, and natural voice interaction.
What we learned
- Bland's Pathway editor is powerful but opinionated. Designing conversational flows visually is fast, but debugging webhook-driven branches requires careful logging. We learned to test each node in isolation before wiring the full loop.
- Passwordless auth is perfect for voice. You can't type a password into a phone call. Auth0's email OTP flow maps naturally onto voice — "check your email, read me the code" is intuitive for any borrower.
- Knowledge base quality > quantity. We started with long policy documents and got poor search results. Rewriting them as concise, question-aligned entries (e.g., "What is the minimum credit score?" → direct answer) dramatically improved Senso's relevance.
- Voice UX is a different discipline. Pauses, confirmations, fallback prompts, and tone all matter. A response that reads well on screen can sound robotic or confusing when spoken aloud. We iterated on Bland's voice personality more than we expected.
What's next for Customer Support for Loan Status in Canada
- Real JUDI integration. Connect the webhook server to JUDI's actual loan database so borrowers get live, personalized status updates — not just policy answers. "Your application is currently in underwriting and should be reviewed by Friday."
- Multilingual support. Canada is bilingual. Adding French language support through Bland's voice options and a French Senso knowledge base would serve Québec borrowers.
- Proactive outbound calls. Flip the model: instead of borrowers calling in, JUDI calls them when their status changes, documents are missing, or a decision is made. Bland's outbound API makes this straightforward.
- Expand the knowledge base with Senso's self-learning. Feed real borrower conversations back into Senso to identify knowledge gaps and auto-generate new KB entries for questions we didn't anticipate.
- Newcomer-to-Canada onboarding. Many JUDI borrowers are building credit for the first time in Canada. A dedicated voice agent that explains Canadian credit scores, what VantageScore means, and how bank verification works could be a game-changer for financial literacy.
Built With
- autho
- bland
- express.js
- senso
Log in or sign up for Devpost to join the conversation.