Muawin approvals console reviewing a flagged loan case, showing risk score, AML checks, and the decision panel.

From lender to infrastructure: Muawin's embedded credit platform.

System Design Fintech
  • 40% of company revenue
  • 30k+ monthly transactions

Project Summary

I designed the API contract, approval automation, and internal review portal that turned Muawin from a lender into credit infrastructure, so partners like Uber and Shell could offer lending inside their own apps.

My Role
PM & Product Designer
Timeline
~2 months core
Team
1 PM/Designer · 3 Engineers · 1 Data Analyst
Platform
API-first (B2B2C) + Internal tools

What I Owned

  • Led discovery across partner and reviewer needs
  • Designed the API contract, automation thresholds, and review portal
  • Shipped with engineering, then iterated the queue workflow
View Full Case Study

01 · Overview

Making Muawin's credit infrastructure available to other companies.

Muawin had proven its micro-lending model: field agents making small loans to retail store owners. The next growth lever was to let partner companies (a grocery delivery app, a ride-hailing service) embed credit inside their own products, running on Muawin's rails. Their users would apply without ever leaving the partner's app. Most would never know Muawin existed.

I designed the product end to end: the API contract partners integrated against, the approval logic that decided which cases a machine could clear and which needed a person, and the internal portal where our team worked the rest. Four months in, it was 40% of company revenue and 30,000+ transactions a month.

02 · The Problem

What does product design look like when the product is invisible?

The end user would never see a Muawin screen. They would apply inside an app they already used and either get the money or not. Every surface a designer normally works with (onboarding, screens, copy) belonged to the partner.

My design surface sat a layer down: the system between systems, and the internal tools for the people running it.

Partner app checkout screen showing payment methods, with the 'Pay later' option selected: split your order in equal monthly installments up to 12 months, powered by Muawin.

Three tensions that couldn't all win at once

Partner simplicity vs. credit data quality

Partners wanted to send a name, a phone number, maybe an ID, and get a yes or no back. Credit needs more signal than that. Every field we required improved our decisions and shrank the pool of partners willing to integrate.

Approval speed vs. default risk

Users applied mid-task, ordering stock or fueling up. They would not wait a day for an answer, and speeding up approvals by loosening scrutiny meant more defaults.

Backlog throughput vs. review quality

Some cases genuinely needed a human. But every case in the queue was a person waiting inside a partner's app, and a queue that blew the same-day SLA burned partner trust.

Three forces, three tradeoffs Tradeoff zone CORNER A Partner simplicity Fewer required fields → easier to integrate CORNER B Credit data quality More signal → better decisions, fewer defaults CORNER C Approval speed Same-day SLA → users stay in flow More fields slows partners Speed cuts data depth Heavier review = slower SLA
Three forces, three tradeoffs. Pull toward any corner and the others stretch.

The core insight: the API contract set what the engine could automate. The automation rate set how much volume hit the review queue. Queue throughput decided whether partners could trust the SLA. Three problems, one system: every decision rippled through all of it.

03 · System Design & The API Contract

The architecture is the design artifact.

In a consumer product, the deliverable is screens. In an infrastructure product, the deliverable is the system itself: how data flows, where decisions happen, and who (or what) makes them.

Most fintech products have a lender and a borrower. This one had three parties: the partner (whose app the user was in), the end user (borrowing), and Muawin (lending). The foundational design work was the contract between them: what data moves where, who sees what, who answers when something breaks.

The core flow

  1. 1

    Partner app

    End user applies inside the partner's interface. The partner collects the required data and calls Muawin's API.

  2. 2

    Muawin API

    Validates the payload and runs it through the credit scoring engine.

  3. 3

    Approval engine

    Three outcomes: auto-approve, auto-deny, or route to a human.

  4. 4

    Disbursement

    Approved requests trigger a transfer to the user or, in later integrations, straight to a supplier.

  5. 5

    Repayment

    Collected through the partner's payment rails or Muawin's own.

From request to repayment 01 · APPLY Partner app Collects data, hits API 02 · VALIDATE Muawin API Payload check, scoring 03 · DECIDE Approval engine Score → bucket AUTO-APPROVE Clear cases, seconds NEEDS REVIEW Human in the loop AUTO-DENY Hard fail, instant via review portal 04 · DISBURSE To borrower or supplier Cash credit (grocery) · Fuel card top-up (Uber + Shell) 05 · REPAY Closed-loop collection Partner rails or driver earnings END
The full path from partner request to repayment, with the three approval outcomes branching in the middle.

The first integration: a major grocery delivery app

Our first partner was a major grocery delivery app. Store owners who sold through the platform could apply for working capital inside the app and repay out of future delivery earnings.

The central product design question: what data fields does the API require from partners?

Every required field cut both ways. More data meant better credit decisions and more confident auto-approvals. It also meant more integration work for the partner's engineers and another reason to push the project down their backlog.

The design decisions

Mandatory fields kept to a minimum

National ID for identity, transaction history on the partner platform for financial signal, and contact details. All data the partner already held, so integration stayed cheap.

Optional fields improved the model

Employment, other income, tenure on the platform. Partners who sent them earned higher auto-approval rates. Partners who skipped them still worked; more of their cases just went to human review.

The API got smarter with volume

The model learned which signals predicted repayment for each partner's user base. Early integrations leaned on manual review. Mature ones ran mostly on autopilot.

API contract: tiered fields MANDATORY 5 fields · ship-blocking Minimum needed for a credit decision. National ID Identity verification Transaction history From the partner platform Contact info Phone, address, partner-side ID Fields the partner already has → low integration cost OPTIONAL Sent → smarter decisions System still works without these. Auto-approval rate climbs when partners opt in. Employment details Other income sources Tenure on platform More fields → higher auto-approval rate → smaller review queue
Five mandatory fields, the rest optional. Partners that send more get more automation.

Tradeoff: simplicity vs. signal. An early draft of the API required far more fields so auto-approval rates would look good from day one. Partner feedback during the grocery integration killed it: they would integrate a 5-field API this quarter, a 15-field API never. Tiered fields were the compromise. Launch with low requirements, then earn accuracy as partners opt into sending more.

04 · The Automation Line

Where to put the human in the loop.

The approval engine had to answer one question for every incoming request: can the system decide this, or does a person need to look at it?

Getting it wrong in either direction was expensive. Auto-approve too loosely and defaults climb. Route too much to review and the queue backs up until the same-day SLA snaps.

Three buckets, one threshold to tune

The system used a scoring model that placed every application into one of three buckets.

Auto-approve

High-confidence cases where the data clearly supported approval. Done in seconds, no human involved.

Auto-deny

Hard failures: sanctions hits, failed identity checks, outstanding defaults. Instant and unambiguous.

Needs review

Everything in between: inconclusive scores, amounts outside the partner's typical range, thin history, conflicting data. These went to the internal portal.

Where auto-approve ended and needs-review began was the most consequential decision in the product. Conservative meant safe and slow. Aggressive meant fast and risky.

Where to put the human in the loop INCOMING REQUEST Score + flags Computed from API payload High score · no flags Inconclusive · soft flags Hard fail · sanctions / fraud AUTO-APPROVE Disburse in seconds No human involvement Threshold tunable as model learns NEEDS REVIEW Routed to portal Reviewer sees flag-first context Same-day SLA before 4pm AUTO-DENY Instant rejection No ambiguity, no review needed Logged for compliance Threshold moves over time: conservative at launch (≈60% auto, 40% review) → climbs as the model learns from reviewed cases.
Decision tree: score and flags route every request into one of three buckets.

Tradeoff: speed vs. safety. We launched conservative, with roughly 60% of cases auto-decided and 40% routed to review. Every reviewed case taught the model more about what predicted repayment, and the auto rate climbed to 76%. The threshold was designed to move as confidence grew, never set once and forgotten.

05 · The Needs-Review Portal

The 10-minute review that took all day to reach.

Once a reviewer opened a case, the review itself took about 10 minutes. The queue was the real problem.

Cases arrived all day while reviewers juggled other work. By mid-afternoon dozens could be waiting, each one a person stuck inside a partner's app. Anything unresolved at end of day broke the same-day SLA.

The portal had three jobs: surface signal so reviewers orient in seconds, keep queue velocity high so cases never pile up, and keep decisions consistent from one reviewer to the next.

Design decisions

Four decisions that turned a 10-minute review into a fast, confident call.

Critical signals pinned at the top

Score, triggering flags, and the AML result stayed visible without scrolling. Everything else sat below the fold, available but quiet.

Flag-first case presentation

Every case opened with the reason it was flagged. An unusual loan amount led with the partner's typical range and the applicant's history right beside it.

Queue-optimized workflow

Resolving a case loaded the next one automatically. Approve or deny took a single click. Session stats showed cases done, cases left, and time to the 4pm cutoff so reviewers could pace themselves.

Integrated AML screening

Sanctions and regulatory database checks ran automatically on every case and surfaced as a simple pass or flag.

Needs-review queue: session strip with cases remaining and time to 4pm SLA cutoff, stat cards showing the auto-approval rate climbing from 60% to 76%, flag-category filters, and a table that leads each row with the flag reason.
The queue: session stats (cases reviewed, remaining, time to the 4pm SLA) sit above the fold so reviewers can self-pace. Each row leads with the reason the case was flagged.
Case detail view with critical signals pinned at the top (risk score, primary flag, AML status, identity), a flag-first explanation card showing why the case was routed to review with comparative context, and a decision panel with system recommendation and Approve & next case action.
The case in review: risk score, primary flag, AML, and identity pinned at the top. The yellow card explains why this case needs a human, with the partner's typical range and the applicant's history for comparison. Resolving it loads the next case.

Tradeoff: depth vs. speed. The first design exposed every data point in an expandable profile. Reviewers said they only needed 3 or 4 signals, yet seeing everything made them feel obligated to check everything, and reviews dragged. The redesign made the critical signals loud and the rest quiet. Decisions got faster because the interface said where to look.

06 · Scaling: The Uber + Shell Integration

Same infrastructure, completely different product.

The grocery integration proved the model. The second one, connecting Uber and Shell, proved the infrastructure could carry a product we never planned for.

Grocery was cash credit: borrow, spend, repay over time. Uber + Shell was in-kind fuel credit. Drivers need fuel to earn, so Muawin scored them on data from both companies (ride history and earnings from Uber, account status from Shell), then asked Shell to top up the driver's fuel card. No cash changed hands. Drivers got fuel and repaid out of their Uber earnings.

What changed in the architecture

Two data sources instead of one

The credit profile drew on Uber and Shell together rather than a single partner's data.

Disbursement went to the supplier

Muawin paid Shell to credit the driver's fuel card. The borrower never touched the money.

Repayment came out of earnings

Collections were deducted from the driver's Uber earnings, a closed loop that cut default risk.

The approval engine and review portal ran unchanged; a credit decision is a credit decision whether the output is cash or fuel. The API layer grew to accept multiple data sources per decision, and disbursement learned to route to a third party. Both were modular extensions of the original design.

INTEGRATION 01 Grocery delivery · cash credit Grocery app Single data source UNCHANGED Muawin: API · engine · review portal The core decisioning layer is shared across integrations. Store owner Cash → wallet Repayment: deducted from future delivery earnings. INTEGRATION 02 · EXTENDED Uber + Shell · in-kind fuel credit Uber Rides · earnings Shell Account status UNCHANGED Muawin: API · engine · review portal Same core; input + output layers extended. Shell fuel card Top-up to driver's card Repayment: deducted from driver's Uber earnings (closed loop).
Same Muawin core. Input and output layers extended for two-source data and supplier-routed disbursement.

Embedding the credit application directly in driver onboarding also cut sign-up time by 50%.

07 · Impact & Outcomes

The numbers after four months.

  • 30k+
    Monthly transactions
    Across partner integrations
  • 40%
    Of company revenue
    Within 4 months of launch
  • Same-day
    Approval turnaround
    Down from a one-day cycle
  • +36%
    Transaction growth
    After automated approval shipped
  • −50%
    Driver sign-up time
    Credit embedded in Uber onboarding
  • 5 cities
    Partner rollout
    Live 2 months after first integration
  • 20k+
    New users via partners
    A 50% lift in user acquisition
  • 3× YoY
    Company revenue growth
    Across all product verticals

Beyond the metrics

A new business line

Muawin went from lending to store owners to running credit rails other companies build on. That reset the company's positioning and its growth path.

Fortune 500 validation

Uber and Shell proved the rails could carry enterprise partners. The fundraising story and the partnership pipeline changed with them.

A compounding flywheel

More volume made the model sharper, which raised auto-approvals, which shrank the queue. And 20,000+ new users arrived through partner channels without direct acquisition spend.

08 · Reflections

What went well, and what I'd do differently.

What went well

The system was the product

The decisions that mattered most had no UI: the API fields, the automation thresholds, the queue workflow. Treating those as design work was the right frame from day one.

The mandatory/optional field model

A stricter API would have scored better on day one and signed fewer partners. Trading early accuracy for adoption, then earning it back with volume, was the right call.

Building for flexibility

Fuel credit was nowhere in the original plan, and the architecture absorbed it anyway. Modular input and output layers paid for themselves within months.

What I'd do differently

Invest in developer experience earlier

Partner engineers were the API's real users. Better docs, a sandbox, and clearer error messages would have cut the hand-holding each integration needed.

Instrument the review portal from day one

We knew the queue was the bottleneck but never measured where reviewers spent time inside a case. That data would have sharpened every iteration.

Formalize threshold changes

Moving the auto-approve line was judgment informed by default rates and queue volume. A written framework with clear triggers would have made it less dependent on gut feel.